将数组的值恢复为简单的最佳方法是什么true
or false
values.
我很困惑,因为 jsperf 给了我VERY与 google chrome 控制台、nodejs 或任何其他 JS 引擎给我的结果不同。 (jsperf 片段在这里 https://jsperf.com/foreach-vs-some-js)
这是代码片段,您可以看到(您可以在此处运行它)some
比使用a快100倍foreach
loop
var array = [];
var i = 0;
var flag = false;
while (i< 100000) {
array.push(Math.random()*10000);
i++;
}
console.time('forEach');
array.forEach((item) => {
if (!flag && item > 10000/2) {
flag = true;
return;
}
return false
});
console.timeEnd('forEach');
console.log(flag);
flag = false;
console.time('some');
flag = array.some((item) => {
if (item > 10000/2) {
return true;
}
return false
});
console.timeEnd('some');
console.log(flag);
问题是,为什么 JSPERF 给出的结果与 chrome 的控制台、nodejs 或任何其他 JS 引擎不同?
编辑:
正如我对下面问题的回答所述,这种行为是有问题的,因为使用 JSPERF 时我打开了 chrome 开发工具,并且所有消息都被记录到控制台,这意味着结果实际上发生了变化。
请记住,将来,当执行时保持控制台打开时,JSPERF 可能无法正常运行。
from MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
除了通过以下方式之外,没有其他方法可以停止或中断 forEach() 循环
抛出异常。
using a foreach
,循环将恰好执行 100000 次。
使用some
,一旦你的谓词返回 true,循环就会停止。
只要你的谓词有可能为真,some
会更有效率
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)