[英]JavaScript: Faster way to create and initialize two dimensional array (matrix)
有沒有更快的方法來創建矩陣並將其歸零?
目前,我的代碼涉及兩個 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;
}
您可以使用Array.prototype.fill方法:
var nodes = Array(ast.length).fill(Array(ast.length).fill(0));
jsperf 測試: http ://jsperf.com/fill-array-matrix
您可以一次創建零數組並創建它的副本:
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);
由於您要求“更快”,看起來您可以通過創建單個初始化數組然后使用.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 測試: http ://jsperf.com/slice-vs-for-two-d-array/2
這種方法在所有三個主要瀏覽器中看起來都快 10-20%。
我不知道這在生成二維數組方面有多快,但恕我直言,這是一種更好的方法。
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 或行、列作為兩個參數的參數初始化常規一維數組來制作的。 然后使用這些來確定數組的尺寸並同時用零填充它。
var arr = new Array(5,7).dim();
console.log(arr[4]);
然后該數組獲得了所需的零維。
輸出:
console.log(arr[4]);
(7) [0, 0, 0, 0, 0, 0, 0]
我希望有人覺得這很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.