相关疑难解决方法(0)

使用零初始化javascript数组

我正在测试使用零初始化大型javascript数组的不同方法.到目前为止,使用push(0)的简单for循环似乎远远超过其他方法(参见http://jsperf.com/initialise-array-with-zeros),但我对此有效性表示怀疑测试.

在实践中,您只需创建一个这样的大型数组并对其进行缓存,以便稍后当您再次需要大型初始化数组时,您可以简单地对其进行切片.因此,我认为最重要的评估是第一次执行此代码所需的时间,而不是许多试验的平均值.

有人不同意吗?或者有人知道我如何/在哪里测试一轮的时间?

编辑:为了回应关于分配具有如此多零的数组的基本原理的一些误解,我想澄清两件事.

  1. 没有稀疏性.我需要创建多个大型数组并将它们用于计算.这些副本将填充浮点数,浮点数恰好为零的可能性可以忽略不计.
  2. 并非所有计算都是按顺序在阵列上执行的.我相信,与覆盖通过引用传递的数组中的值相比,在进程中生成数组的函数效率低(参见例如gl-matrix.js).

因此,我的解决方案是创建一个大型零填充数组,然后在需要新数组时获取slice(),然后通过引用将该副本传递给任何函数以使用它.在任何浏览器中,Slice都是超级超级快速的.

现在,虽然您可能仍然担心我为什么要这样做,但我真正感兴趣的是,如果可以在第一次运行时评估不同初始化方法的性能.我希望有这个时间,因为在我的情况下,我肯定只运行一次.

是的,我的jsperf代码可能会错过一些解决方案.所以如果你有一个我没有想到的方法,请随意添加它!谢谢!

javascript optimization performance

3
推荐指数
1
解决办法
9099
查看次数

如何将多个零推送到已经存在的数组

我在此链接上找到了如何创建具有选定数量的零的数组。 创建零填充 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)

javascript arrays jquery

3
推荐指数
1
解决办法
1690
查看次数

JavaScript ArrayBuffer 切片在 Safari 9.1.2 中明显损坏

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)

javascript safari

3
推荐指数
1
解决办法
2211
查看次数

for loop与if条件

我有两种替代方法来执行一段代码.代码基本上重置了三个数组中的所有值.其中两个是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)

哪一个会更快?鉴于阵列可以具有不同的长度并且彼此没有关系.

有一个真正的好讨论在这里 …

javascript optimization loops if-statement

2
推荐指数
1
解决办法
151
查看次数

在Javascript中创建数组

如何创建长度为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 arrays

-1
推荐指数
1
解决办法
203
查看次数