繁体   English   中英

使用带有键数组的数字 for 循环是否比在 JavaScript 中使用 for-in 循环遍历 object 更快?

[英]Is using a numeric for loop with an array of keys faster than iterating over an object with a for-in loop in JavaScript?

请注意:这个问题纯粹是假设性的,用于学习目的。 我不打算进行不必要的微优化。

根据我所做的研究,与其他循环相比,使用for-in循环似乎相对较慢。 例如,这个循环:

const obj = { a: 'a', b: 'b', c: 'c', ... };

for (key in obj) {
  const val = obj[key];
}

平均比这个循环大约 7 倍:

const arr = [ 'a', 'b', 'c', ... ];

for (let i = 0; i < arr.length; i++) {
  const val = arr[i];
}

我使用for-in的替代解决方案是创建一个键数组,我可以使用数字 for 循环对其进行迭代,然后在 object 中查找这些键。

我想知道,这会是比 for-in 循环更好的解决方案(纯粹就原始性能而言):

const keys = [ 'a', 'b', 'c', ... ]
const obj = { a: 'a', b: 'b', c: 'c', ... }

for (let i = 0; i < keys.length; i++) {
  const val = obj[keys[i]];
}

多亏了 VLAZ 的大力支持,我在其他地方询问后才弄明白。 另一个人向我推荐了Benchmark.js ,我得出结论,对于大数据,带查找键的数字大约比 for-in 快 10 倍

数据大小:

const iterations = 1000000;

const obj = {};
for (let i = 0; i < iterations; i++) {
  obj1['s' + i] = 1;
}

const arr = [];
for (let i = 0; i < iterations; i++) {
  arr[i] = 's' + i;
}

for-in 基准:

for (key in obj) {
  const v = obj[key];
}

完成时间:~0.3174 秒

用于查找的数字:

for (let i = 0; i < arr.length; i++) {
  const v = obj[arr[i]];
}

完成时间:~0.0396 秒

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM