JavaScript:更快速地创建和初始化二维数组(矩阵)

Saa*_*adH 9 javascript arrays

有没有更快的方法来创建和清零矩阵?
目前,我的代码涉及两个for循环:

var nodes = new Array(ast.length);

for (var i=0; i < nodes.length; i++){
    nodes[i] = new Array(ast.length);
    for (var j=0; j < nodes.length; j++)
        nodes[i][j]=0;
}
Run Code Online (Sandbox Code Playgroud)

gne*_*kus 10

您可以使用Array.prototype.fill方法:

var nodes = Array(ast.length).fill(Array(ast.length).fill(0));
Run Code Online (Sandbox Code Playgroud)

jsperf测试:http://jsperf.com/fill-array-matrix

  • 毫无疑问,初始化速度很快,这种方法的问题是,如果我决定更改单个单元格值,让节点[0] [4] = 1,它会将所有行的第4列更改为1. (4认同)
  • 这需要更多地反对。具有相同的行是不正确的。 (3认同)

jfr*_*d00 3

由于您要求“更快”,看起来您可以通过创建单个初始化数组然后使用.slice()复制它而不是初始化每个数组本身来获得一些速度:

var nodes = new Array(ast.length);
var copy = new Array(ast.length);
for (var i = 0; i < ast.length; i++) {
    copy[i] = 0;
}

for (var i=0; i < nodes.length; i++){
    nodes[i] = copy.slice(0);
}
Run Code Online (Sandbox Code Playgroud)

jsperf测试: http://jsperf.com/slice-vs-for-two-d-array/2

此方法在所有三种主要浏览器中看起来都快了 10-20%。

在此输入图像描述