JavaScript - 控制二维动态数组

时间:2013-05-19 10:12:49

标签: javascript arrays multidimensional-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

有可能吗?我怎么能这样做,谢谢

2 个答案:

答案 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值的数组,从中读取时需要注意这些值。此外,具有这样的孔的阵列具有不良性能(如果这将是一个问题 - 对于少数,甚至几百个值,这无关紧要。)

答案 1 :(得分:0)

覆盖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];
}