我从书中学到,你应该这样写for循环:
for(var i=0, len=arr.length; i < len; i++){
// blah blah
}
所以arr。每次不计算长度。
其他人说编译器会做一些优化,所以你可以这样写:
for(var i=0; i < arr.length; i++){
// blah blah
}
我只是想知道在实践中哪种方法是最好的?
我从书中学到,你应该这样写for循环:
for(var i=0, len=arr.length; i < len; i++){
// blah blah
}
所以arr。每次不计算长度。
其他人说编译器会做一些优化,所以你可以这样写:
for(var i=0; i < arr.length; i++){
// blah blah
}
我只是想知道在实践中哪种方法是最好的?
当前回答
试试这个:
var myarray =[],
i = myarray.lenght;
while(i--){
// do somthing
}
其他回答
现在是2022年底
有时根本没有用数组长度计算:
如果你有一个索引为var myArray =[1,2,3,4,25,99999999999999]的数组,使用任何索引为1的槽数组(包括forEach)的解决方案都是非常缓慢的。
对我来说,最好的解决方案是:
for(let _i in myArray ) {
if(myArray[_i]) {
(function(s) {
///
})(myArray[_i])
}
}
我总是用第一种体裁写作。
即使编译器足够智能,可以为数组优化它,但如果我们在这里使用DOMNodeList或一些计算长度的复杂对象,它仍然是智能的?
我知道关于数组的问题是什么,但我认为用一种风格编写所有循环是一个很好的实践。
我所知道的最优雅的解决方案是使用地图。
var arr = [1,2,3];
arr.map(function(input){console.log(input);});
循环javascript数组的最快方法是:
var len = arr.length;
while (len--) {
// blah blah
}
请看这篇文章的完整比较
截至2019年,WebWorker已经更加流行,对于大型数据集,我们可以使用WebWorker通过充分利用多核处理器来更快地处理。
我们还有Parallel.js,这使得WebWorker更容易用于数据处理。