【发布时间】: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.log:console.log(array),或console.log(jSON.stringify(array)) -
由于执行JS的引擎比较少,所以无法完全回答您的问题。答案是绝对无关紧要。但是,要在现实世界中得出更好的结论-您为什么不自己测量呢?只需使用 3 个最流行的浏览器并分析执行速度最快的浏览器。我认为你甚至不应该把你的时间浪费在这个优化上,这绝对没有意义。
-
测试的方法是创建一个计时器,尝试使用动态生成的数组,然后 console.log 输出结果时间。
标签: javascript arrays performance