【问题标题】:JavaScript - control two-dimensional dynamic arrayJavaScript——控制二维动态数组
【发布时间】:2013-05-14 01:36:36
【问题描述】:

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

有可能吗?我该怎么做呢,谢谢

【问题讨论】:

  • 你的意思是你想在dynamic上尝试访问的索引上获取一个新的空白数组,如果它不存在的话?
  • 不能直接初始化二维数组。但是,您可以将 push() 数组元素添加到您的初始数组中,以有效地将其设为 2D。
  • 你想要一个二维数组???
  • 是的,谢谢 :) 就像 @Ingo Bürk 所做的一样 :)

标签: javascript arrays multidimensional-array


【解决方案1】:

你可以做的一件事是这样的 (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 值的数组,读取它时需要注意这一点。此外,具有此类孔洞的数组性能很差(如果这将是一个问题——对于几个,甚至几百个值,也没关系)。

【讨论】:

  • @Ingo Bürk +1 并感谢您的回答,您能否发布我如何从这个多维数组中检索值例如:` 我只需要 id=3 值,例如 (3,2) 和 (3 ,3) `
【解决方案2】:

覆盖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)

如果“项”不存在,它会在返回之前创建,这允许您在数组的两个维度上使用所有数组方法。 (我相信)

您还可以通过将其添加到 Array 原型中使其更通用,这样您就可以在所有数组上使用它。

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

【讨论】:

  • 是的,就像我说的,还有更好的方法。而且我还是最喜欢上课。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2011-07-03
  • 2017-07-06
  • 1970-01-01
  • 2014-06-03
  • 2015-08-17
相关资源
最近更新 更多