【问题标题】:Javascript : change cell value in 2D arrayJavascript:更改二维数组中的单元格值
【发布时间】:2017-03-08 14:03:10
【问题描述】:

所以,我有一个二维数组,我像这样贴花:

var grille = new Array(60).fill(new Array(30).fill(false));

我希望能够更改数组中一个单元格的值,但是当我这样做时

grille[x][y] = "new value";

我有所有在索引 y 处包含“新值”的 x 数组,而不是 array[x][y]。

所以我有

grille[1][y] = "new value"
grille[2][y] = "new value"
grille[3][y] = "new value"

而不是

grille[x][y] = "new value"
grille[1][y] = false

例如。 这可能是一个菜鸟错误,但我对 javascript 很陌生,不知道该怎么做。

感谢您的帮助。

【问题讨论】:

  • 不清楚问题/问题是什么。
  • 我想做grille[x][y] = "new value",改变grille[x][y]的值,但是当我这样做时,不仅grille[x][y]被改变,而且grille[1][y], grille[2][y],...也被改变了,我不知道为什么
  • 不是解释这一点的最佳人选,但问题是格栅中的所有数组实际上并不是唯一的,它们都共享相同的引用数组,当您按照您的方式创建它们时会发生这种情况.我认为您正在寻找数组的“深层副本”。

标签: javascript multidimensional-array


【解决方案1】:

在你的情况下,'new Array(30).fill(false)' 只会被创建一次。它不会为“new Array(60)”中的每个元素创建。所以所有 60 个单元格都拥有相同的数组引用。所以,如果你改变一个 - 它会更新它的所有参考。

var grille = (new Array(60)).fill().map(function(){ return new Array(30).fill(false);});

在这里,对于“new Array(60)”中的每个元素,“new Array(30)”将被创建,并且每个单元格现在都拥有不同的引用。希望这会有所帮助。

【讨论】:

    【解决方案2】:

    所以我所做的是var grille = new Array(60).fill(new Array(30).fill(false)); 用相同的new array(30) 填充格栅,它并没有像我想的那样为每个格栅索引创建一个新数组。 所以我做的是这个

    grille= new Array(60);
    for (var i = 0; i < grille.length; i++) {
        grille[i] = new Array(30).fill(false);
    }
    

    【讨论】:

      【解决方案3】:

      无论如何,从 ES5 开始(我相信),你可以这样做:

      var grille = Array.from(new Array(60),_=>new Array(30).fill(false))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-31
        • 2022-01-20
        • 2015-03-22
        • 2020-10-10
        • 1970-01-01
        • 2019-08-02
        相关资源
        最近更新 更多