具有O(1)查找的对象的数据结构?

时间:2015-10-16 21:21:29

标签: javascript

假设我正在访问图数据结构中的节点。当我访问每个节点时,我会将其添加到“已访问”列表中。需要进行O(1)查找以验证我不会多次访问同一节点。

当然,如果每个节点都有一个关联值,我可以使用常规JavaScript对象(哈希表)来存储我的“访问”列表,但是假设我想知道节点是否可以计算为字符串或不。是否有支持O(1)对象查找的JavaScript数据结构?我怎么能实现一个?

2 个答案:

答案 0 :(得分:5)

您可以使用ES2015中添加的SetWeakMap

您不需要等待浏览器支持,因为像babel这样的转发器具有符合标准的polyfill。

答案 1 :(得分:0)

要执行O(1)查找,您需要使用哈希集。原生javascript中没有哈希集,但是有一个哈希映射(普通对象)。您可以通过检查对象是否包含密钥来模拟哈希集。您的价值需要实施toString方法。

var Set = function () {}
Set.prototype.contains = function (v) {
  return (v.toString() in this);
}
Set.prototype.add = function (v) {
  this[v.toString()] = true;
}
Set.prototype.remove = function (v) {
  delete this[v.toString()];
}