是否有更快的方法来创建和清零矩阵? 目前,我的代码涉及两个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;
}
答案 0 :(得分:10)
您可以使用Array.prototype.fill方法:
var nodes = Array(ast.length).fill(Array(ast.length).fill(0));
jsperf test:http://jsperf.com/fill-array-matrix
答案 1 :(得分:2)
您可以创建一次零数组并创建它的副本:
var length = 10;
var zeros = Array.apply(null, Array(length)).map(Number.prototype.valueOf, 0);
var nodes = zeros.map(function(i) {
return zeros.slice();
});
console.log(nodes);
答案 2 :(得分:2)
由于您要求“更快”,看起来您可以通过创建单个初始化数组然后使用.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);
}
jsperf test:http://jsperf.com/slice-vs-for-two-d-array/2
在所有三种主流浏览器中,此方法的速度要快10-20%。
答案 3 :(得分:0)
我不知道生成二维数组的速度有多快,但是恕我直言,这是大多数情况下更好的方法。
Array.prototype.dim = function(){
if( this.length==2 ){
r=this.shift(); c=this.shift();
while( r-- ) this.push( new Array( c ).fill(0,0) );
return this;
}
}
在使用中,二维数组是通过使用x,y或rows,cols作为两个参数初始化常规的1d数组而制成的。然后将它们用于标注数组的尺寸并同时用零填充。
var arr = new Array(5,7).dim();
console.log(arr[4]);
然后,数组具有所需的零维。
输出:
console.log(arr[4]);
(7) [0, 0, 0, 0, 0, 0, 0]
我希望有人觉得这有用。