簡體   English   中英

JavaScript:創建和初始化二維數組(矩陣)的更快方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM