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

Javascript 如何在Node.js中实现对象属性,javascript,node.js,object,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 typ

我有一个包含大量值的数组,我在其中迭代以查找如下特定值:

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中的?它们基本上是为了查找而进行迭代的,与数组相同吗?我认为它们可能是使用哈希表或其他什么来实现的。

您已经询问了对数组进行迭代的问题,并且询问了使用对象是否可以提供更好的性能,但是您使用for-in-loop来实现数组,并且使用for-loop或es6-includes方法可能会更好地提高性能

如果arr是一个数组,您只想检查它是否包含值,那么可以使用es6includes方法

注意:您需要检查您的目标浏览器是否支持它,如果不支持,则检查shim/pollyfill

如果您不想使用es6,那么可以使用for循环进行循环

在您的示例中,您使用的是for-in循环,它实际上用于对象而不是数组。当在阵列上使用for循环时,它应该会提供更好的性能

当使用字符串在对象(如hashmap)中查找值时,对象的大小可能会影响perf,但这种影响可能不重要,因为js引擎将在内部进行优化


选中此项,选择对象最后一个属性中的第一个属性不会真正影响性能。很明显,如果arr是一个数组,那么这种影响可能会扩大

,您应该为var i=0使用a;ifunction haveValue(value) { return (arr.includes(value)); }
function haveValue(value) {
  for(var i = 0; i < arr.length; i++) {
    if(arr[i] === value) {
      return true;
    }
  }
  return false;
}