【问题标题】:Javascript Hashmap to Access Object ElementJavascript Hashmap 访问对象元素
【发布时间】:2014-10-01 04:36:16
【问题描述】:

以下示例来自:How is a JavaScript hash map implemented? 我想知道这是否是从对象中获取元素的最优化方式:

var obj = {
    foo:{ hi: "higher"},
    bar:{ bye: "bye"},
    baz:{ cya: "cya"}
}

var value = obj[Object.getOwnPropertyNames(obj)[0]];
console.log(value);

我只需要最优化的方法来从给定对象中获取一个元素(随机很好,只需要对象中的任何一个元素),不管它是什么。我只需要访问它并希望能够删除它。

这是最好的实现吗?

【问题讨论】:

  • 嗯,最优化的方法是提前知道属性名称。如果您只想获取“第一个”属性名称,则使用 for...in 循环(并在第一次迭代后中断)可能更高效。您始终可以使用浏览器的开发者工具或jsperf.com 对您的解决方案进行基准测试。
  • 我不需要对象中的第一个,但我也需要能够删除/删除它
  • 好的,那么你所拥有的工作正常。或者正如我所说,使用for...in 循环。使用jsperf.com 比较性能(我假设“优化”您是在谈论性能)。
  • 我想使用 hashmap 来避免 for 循环 :] 谢谢!
  • 在事先不知道属性名称的情况下,对象不会针对访问进行优化。 Object.getOwnPropertyNames 还将以一种或另一种方式迭代对象并收集所有属性名称。使用任何对你有用的东西。如果您不想使用 for...in 循环,即使它们更快,也可以。这都是你的决定,我只是指出替代方案。 for...in 循环用于迭代对象,因此它们不会相互排斥,相反。

标签: javascript hash hashmap


【解决方案1】:

总结所有 cmets,您的使用要求使用对象数组,因为您似乎不知道名称值对的名称。

如果您决定使用数组,除了使用 slice() 根据索引删除元素之外,还可以使用 push()pop()shift()unshift()对象路由...

那么像下面这样简单的东西应该可以解决问题。

var object = {
    name: value,
    anotherName: anotherValue
};

var val;

for (var key in object) {
    val = key;
    break;
}

从对象中删除属性就像在其上调用delete 一样简单。例如,

delete object.name;

这里有一个例子来说明。 http://jsbin.com/kiwituje/1/edit

【讨论】:

  • 鉴于 val 变量现在已经引用了对象中的键,如何使用该引用删除它?
  • 谢谢!顺便说一句,我不使用数组的原因是为了不断调整我的用例大小,如果它要使用它而不是哈希图
  • JavaScript 中的数组是动态的。它们不需要任何显式调整大小。这是由运行时本身处理的。不客气。
  • 我知道这就是问题所在。对于我的用例,每秒可能调整几千次会影响性能
  • 好的。听起来不错。那么对象就足够了。
猜你喜欢
  • 1970-01-01
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
相关资源
最近更新 更多