【问题标题】:How does JavaScript array get item at index worksJavaScript数组如何在索引处获取项目
【发布时间】:2015-09-18 13:20:47
【问题描述】:

我试图了解 get item at index 在 JavaScript 中的数组中是如何工作的。

例如,假设我有一个 for 迭代一个包含数千(或数百万)项的数组。哪种方式是打印项目的最佳方式(具有最佳性能)?

// Option 1
for (int i = 0; i < array.length; i++) {
    var data = array[i];
    console.log( data.ID, data.name, data.date, data.description );
}

// Option 2
for (int i = 0; i < array.length; i++) {
    console.log( array[i].ID, array[i].name, array[i].date, array[i].description );
}

是选项1还是选项2?还是使用第一个或第二个选项是一样的?还是有更好的方法来做到这一点?

例如,我知道 Java ArrayList 中的 get() 以这种方式工作,因此显然最好的方法是选项 1,因为它每次调用 get() 方法时都会检查范围。

public E get(int index) {
    rangeCheck(index);

    return elementData(index);
}

private void rangeCheck(int index) {
    if (index >= size)
        throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

JavaScript 是否以类似的方式工作?

这里的“大问题”真的是 JavaScript 数组如何在索引处获取项目

注意:我试图寻找在数组中获取元素的最佳方法,但我能找到的只是迭代数组的最佳方法。这不是我想从这个问题中得到的!

【问题讨论】:

  • 这取决于您所说的“打印”是什么意思。如果它表示console.log,那么最好的方法是在整个数组中应用console.logconsole.log(array),或console.log(jSON.stringify(array))
  • 由于执行JS的引擎比较少,所以无法完全回答您的问题。答案是绝对无关紧要。但是,要在现实世界中得出更好的结论-您为什么不自己测量呢?只需使用 3 个最流行的浏览器并分析执行速度最快的浏览器。我认为你甚至不应该把你的时间浪费在这个优化上,这绝对没有意义。
  • 测试的方法是创建一个计时器,尝试使用动态生成的数组,然后 console.log 输出结果时间。

标签: javascript arrays performance


【解决方案1】:

编辑

忘记我所说的一切。对于非常旧的浏览器来说确实如此。对于新的(使用 Chrome、Firefox、IE11 和 Edge 测试),这些示例几乎没有区别。

我用一亿条记录的数组进行了测试,相差

选项 2 显然稍微快了一点,没有什么是真正重要的。

【讨论】:

  • 浏览器优化 for 循环遍历数组。您可能不会发现缓存长度有任何性能差异。
  • 您的第二个示例将在元素为 false 或 0 或空字符串时停止循环。
  • @torazaburo 当然,任何虚假值都会停止。这就是为什么我说他必须确保他的对象不是 null / undefined(因为他使用的是对象,而不是字符串、布尔值或数字。
猜你喜欢
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 2010-10-09
相关资源
最近更新 更多