如何在Node.js中实现对象属性

时间:2015-07-14 13:46:17

标签: javascript node.js object

我有一个包含大量值的数组,我正在迭代以找到这样的特定值:

function haveValue(value) {
  for(var index in arr) {
    var prop = arr[index];
    if(prop === value) {
      return true;
    }
  }
  return false;
}

但是我发现我可以通过使用对象更快地执行此查找:

function haveValue(value) {
  return typeof obj[value] !== 'undefined';
}

但是,在这样做之后,我没有看到很多性能方面的改进。所以我想知道,对象属性如何存储在Javascript / Node.js中?它们基本上是迭代的,以便找到,就像一个数组一样?我认为它们可能是使用哈希表或其他东西实现的。

1 个答案:

答案 0 :(得分:0)

您已经询问过如何通过数组进行iliterating,如果使用对象会提供更好的性能,但是您使用for in循环来表示数组,并且使用{{1}可以更好地增加性能loop或es6包含方法。

如果for是一个数组而您只想检查它是否包含值,则可以使用es6 arr方法(docs here

includes()

N.B。你需要检查你的目标浏览器是否支持它,如果没有,则需要shim / pollyfill。

如果您不想使用es6,那么您可以循环使用function haveValue(value) { return (arr.includes(value)); } 循环

for

在您的示例中,您使用的是function haveValue(value) { for(var i = 0; i < arr.length; i++) { if(arr[i] === value) { return true; } } return false; } 循环,它实际上是对象而不是数组。 for in循环在数组上使用时会给你更好的性能

虽然在使用字符串查找对象中的值(如hashmap)时对象的大小可能会影响perf,但效果可能无关紧要,因为js引擎将在内部进行优化。

检查这个jspef,选择一个对象的最后一个属性并不会真正影响性能。 (显然效果可能会扩大)