我有两种方法可以执行一段代码。代码基本上重置了三个数组中的所有值。其中两个是int数组,一个是boolean。
选择1
for (i = 0; i < array1.length; i++)
array1[i] = 0;
for (i = 0; i < array2.length; i++)
array2[i] = 0;
for (i = 0; i < array3.length; i++)
array3[i] = false;
选择2
int limit = <assign the greatest of the array lengths>
for (i = 0; i < limit; i++)
{
if (i < array1.length)
array1[i] = 0;
if (i < array2.length)
array2[i] = 0;
if (i < array3.length)
array3[i] = false;
}
其中哪一项会更快?鉴于阵列可以具有不同的长度并且彼此没有关系。
有一个非常好的讨论here。首先列出的答案很清楚地解释了数组在javascript中实际意味着什么。对于那些有兴趣看看的人来说!
答案 0 :(得分:6)
这个版本几乎肯定会更快。它也更容易阅读和更短,这两个都是比速度更重要的属性(99 +%的时间)。
for (i = 0; i < array1.length; i++)
array1[i] = 0;
for (i = 0; i < array2.length; i++)
array2[i] = 0;
for (i = 0; i < array3.length; i++)
array3[i] = false;
通常,访问内存中最近访问的数据的速度更快。
此版本也不会受到您在第二版中获得的额外分支的影响。
一个足够先进的编译器会将第二个版本转换为第一个版本。
基准测试:微基准测试100%无用,无需先分析整个程序。由于我不认为性能测量是有用的,我不提供它们。
答案 1 :(得分:1)
function reset_array(array, value) {
var len = array.length;
array.length = 0;
while (len--) array.push(value);
}
reset_array(array1, 0);
reset_array(array2, 0);
reset_array(array3, false);