当数组更改时,将其推送到数组历史数组

时间:2017-06-02 09:15:28

标签: javascript arrays

我已经简化了代码,使其变得更容易,但是我在网格上制作游戏,跟踪玩家的游戏棋子。

如果它是一个9x9网格,那么该数组将有9个索引,每个索引包含9个索引,所以我可以将网格上的一个点称为数组[x] [y]。每转一圈我想将这个位置存储在网格历史数组中。

我曾经尝试过每次使用array.push,但是在转了一圈后,如果我查看历史记录,所有网格都与当前网格相同。我做了一个简单的jsfiddle演示 - https://jsfiddle.net/3rmwnuv5/

下面的代码:

  var stones = [['clear', 'clear', 'clear'], ['clear', 'clear', 'clear'], ['clear', 'clear', 'clear']]

  var stoneHistory = [];

  stoneHistory.push(stones);

  stones[1][1] = 'black';

  stoneHistory.push(stones);

  stones[0][2] = 'white';

  stoneHistory.push(stones);

  console.log(stoneHistory);

2 个答案:

答案 0 :(得分:0)

所以我抬头看了如何做一个深度数组,并通过json stringify完成,如下所示。

  var stones = [['clear', 'clear', 'clear'], ['clear', 'clear', 'clear'], ['clear', 'clear', 'clear']]

  var stoneHistory = [];

  var copy = JSON.parse(JSON.stringify(stones));
  stoneHistory.push(copy);

  stones[1][1] = 'black';

  var copy = JSON.parse(JSON.stringify(stones));
  stoneHistory.push(copy);

  stones[0][2] = 'white';

  var copy = JSON.parse(JSON.stringify(stones));
  stoneHistory.push(copy);

  console.log(stoneHistory);

答案 1 :(得分:0)

  var stones = [['clear', 'clear', 'clear'], ['clear', 'clear', 'clear'], ['clear', 'clear', 'clear']]

  var stoneHistory = [];

  var val1 = JSON.parse(JSON.stringify(stones));
  stoneHistory.push(val1);

  stones[1][1] = 'black';

  var val2 = JSON.parse(JSON.stringify(stones));
  stoneHistory.push(val2);

  stones[0][2] = 'white';

console.log(stoneHistory);