本文介绍了为什么向后迭代数组比向前迭代快的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

鉴于此代码:

var arr = [];

for (var i = 0; i < 10000; ++i)
    arr.push(1);

转发

for (var i = 0; i < arr.length; ++i) {}

向后

for (var i = arr.length - 1; i >= 0; --i) {}

硬编码转发

for (var i = 0; i < 10000; ++i) {}

为什么向后的速度要快得多?

Why is backwards so much faster?

测试如下:http://jsperf.com/array-iteration-direction

推荐答案

因为你的 forwards-condition 每次都必须接收数组的 length 属性,而其他条件只需要检查大于零",一个非常快的任务.

Because your forwards-condition has to receive the length property of your array each time, whilst the other condition only has to check for "greater then zero", a very fast task.

当你的数组长度在循环过程中没有变化,并且你真的很看重ns-perfomance时,你可以使用

When your array length doesn't change during the loop, and you really look at ns-perfomance, you can use

for (var i=0, l=arr.length; i<l; i++)

顺便说一句:代替 for (var i = arr.length; i > 0; --i) 你可以使用 for (var i = arr.length; i--> 0; ) 真正从 n-1 到 0,而不是从 n 到 1 遍历您的数组.

BTW: Instead of for (var i = arr.length; i > 0; --i) you might use for (var i = arr.length; i-- > 0; ) which really runs through your array from n-1 to 0, not from n to 1.

这篇关于为什么向后迭代数组比向前迭代快的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-22 16:06
查看更多