簡體   English   中英

JavaScript - 控制二維動態數組

[英]JavaScript - control two-dimensional dynamic array

我想在javascript中初始化一個二維動態數組,它不限制元素(也許)就像

var dynamic = new Array ();
dynamic[] = new Array ();


之后我想為特殊數組添加值

dynamic[id].push(2); // id = 3, dynamic[3][0] = 2
...
dynamic[id].push(3); // id = 3, dynamic[3][1] = 3
...
dynamic[id].push(5); // id = 5, dynamic[5][0] = 5

這是可能的? 我怎么能這樣做,謝謝

你可以做的一件事是這樣的( jsfiddle ):

var dynamic = [];

dynamic.push = function (id, value) {
    if (!this[id]) {
        this[id] = [];
    }

    this[id].push(value);
}

dynamic.push(3, 2);
dynamic.push(3, 3);
dynamic.push(5, 5);

當然,這可以做得更好,但它得到了重點。 就個人而言,我會為此寫一堂課。

編輯 :另外,請記住,這會創建一個很可能具有大量undefined值的數組,從中讀取時需要注意這些值。 此外,具有這樣的孔的陣列具有不良性能(如果這將是一個問題 - 對於少數,甚至幾百個值,它將無關緊要)。

覆蓋push可能不是最好的計划。 添加另一個方法/函數將使其更容易理解。 有人閱讀push(1,3)可能會假設您將1和3推入數組而不是3進入第1項。

var dynamic = [];

dynamic.item = function(index) {
    if (!dynamic[index]) {
        dynamic[index] = [];
    }
    return dynamic[index];
}

這將允許您執行以下操作:

dynamic.item(1).push(1)

如果“item”不存在,則在返回之前創建它,這允許您在數組的兩個維度上使用所有數組方法。 (我相信)

您還可以通過將其添加到Array原型來使其更加通用,這將允許您在所有陣列上使用它。

Array.prototype.item = function(index) {
    if (!this[index]) {
        this[index] = init;
    }
    return this[index];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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