我正在测试使用零初始化大型javascript数组的不同方法.到目前为止,使用push(0)的简单for循环似乎远远超过其他方法(参见http://jsperf.com/initialise-array-with-zeros),但我对此有效性表示怀疑测试.
在实践中,您只需创建一个这样的大型数组并对其进行缓存,以便稍后当您再次需要大型初始化数组时,您可以简单地对其进行切片.因此,我认为最重要的评估是第一次执行此代码所需的时间,而不是许多试验的平均值.
有人不同意吗?或者有人知道我如何/在哪里测试一轮的时间?
编辑:为了回应关于分配具有如此多零的数组的基本原理的一些误解,我想澄清两件事.
因此,我的解决方案是创建一个大型零填充数组,然后在需要新数组时获取slice(),然后通过引用将该副本传递给任何函数以使用它.在任何浏览器中,Slice都是超级超级快速的.
现在,虽然您可能仍然担心我为什么要这样做,但我真正感兴趣的是,如果可以在第一次运行时评估不同初始化方法的性能.我希望有这个时间,因为在我的情况下,我肯定只运行一次.
是的,我的jsperf代码可能会错过一些解决方案.所以如果你有一个我没有想到的方法,请随意添加它!谢谢!
我在此链接上找到了如何创建具有选定数量的零的数组。 创建零填充 JavaScript 数组的最有效方法?
但我的问题是,想象我已经有一个数组
var a = ['hihi','haha']
Run Code Online (Sandbox Code Playgroud)
如何在我的两个第一个元素后添加 12 个零?所以它变成:
a = ['hihi','haha',0,0,0,0,0,0,0,0,0,0,0,0];
Run Code Online (Sandbox Code Playgroud)
我当然可以去
for(var i = 0; i < 12, i++){
a.push(0);
}
Run Code Online (Sandbox Code Playgroud)
但是有一种单行方法吗?就像是
a.push(6*[0]);
Run Code Online (Sandbox Code Playgroud) Safari 9.1.2 (10601.7.7) 中的基本 JavaScript 功能似乎被破坏。也许我只是做错了什么?正在寻找有关如何度过这一切的建议......
有问题的函数是ArrayBuffer.prototype.slice()
下面是一个在 Chrome 和 Firefox 中运行良好的使用示例,但在 Safari 中则不行。
var buffer = new ArrayBuffer(16);
var bufferView = new Uint8Array(buffer);
console.log(bufferView.slice(0,8)); // TypeError: bufferView.slice is not a function
Run Code Online (Sandbox Code Playgroud) 我有两种替代方法来执行一段代码.代码基本上重置了三个数组中的所有值.其中两个是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;
Run Code Online (Sandbox Code Playgroud)
选择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;
}
Run Code Online (Sandbox Code Playgroud)
哪一个会更快?鉴于阵列可以具有不同的长度并且彼此没有关系.
有一个真正的好讨论在这里 …
如何创建长度为3的数组,并且数组元素的值为0.如果我将数组的长度设为3,则数组应如下所示
a[0]=0;
a[1]=0;
a[2]=0;
Run Code Online (Sandbox Code Playgroud)
我试过这个new Array(3),它创建了一个a[,,,]长度为3 new Array(0,0,0)的数组并创建了一个数组a[0,1,2],是否可以通过定义数组元素的长度和值来创建数组?
提前致谢
javascript ×5
arrays ×2
optimization ×2
if-statement ×1
jquery ×1
loops ×1
performance ×1
safari ×1