控制二维动态数组



我想在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);

当然,这可以做得更好,但它已经传达了重点。就我个人而言,我会为此编写一个类。

Edit:另外,请记住,这会创建一个具有大量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];
}

相关内容

  • 没有找到相关文章

最新更新