gpt4 book ai didi

javascript - 散列 JavaScript 对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:34 26 4
gpt4 key购买 nike

我有一个函数接收 JS 对象列表作为参数。我需要将有关这些对象的信息存储在私有(private)变量中以供将来引用。我不想将属性塞入对象本身,我只想将其保留在字典中。我需要能够在亚线性时间内查找对象的元数据。

为此,我需要一个hash 函数,这样对于任意两个对象o1o2

hash(o1) !== hash(o2) 每当 o1 !== o2

这种散列函数的一个完美示例是对象的内存地址,但我不认为 JS 公开了它。有办法吗?

最佳答案

每个对象引用都是不同的。为什么不将对象插入数组?遍历数组寻找对象引用可能仍然比检查递归庄园中的每个对象以生成散列键更好。

function Dictionary() {
var values = [];

function contains(x) {
var i = values.length;

while(i--) {
if (values[i] === x) {
return true;
}
}

return false;
}

function count() {
return values.length;
}

function get(i) {
return (i >= 0 && i < values.length) ? values[i] : null;
}

function set(o) {
if (contains(o)) {
throw new Error("Object already exists in the Dictionary");
}
else {
return values.push(o) - 1;
}
}

function forEach(callback, context) {
for (var i = 0, length = values.length; i < length; i++) {
if (callback.call(context, values[i], i, values) === false) {
break;
}
}
}

return {
get: get,
set: set,
contains: contains,
forEach: forEach,
count: count
};
}

并使用它:

var objects = Dictionary();

var key = objects.set({});

var o = objects.get(key);

objects.contains(key); // returns true

objects.forEach(function(obj, key, values) {
// do stuff
}, this);

objects.count(); // returns 1

objects.set(o); // throws an error

关于javascript - 散列 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21342738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com