2017-06-02 42 views
0

我簡化了代碼以使它更容易,但是我在一個跟蹤玩家遊戲塊的網格上做了一個遊戲。當一個數組發生變化時,將它推到一個數組歷史數組中

如果它是一個9x9網格,數組將有9個索引,每個索引包含9個索引,所以我可以將數組[x] [y]指向網格上的一個點。每一回合我都想將這個位置存儲在一個網格歷史數組中。

我試着每次都使用array.push,但是在1轉之後,如果我查看歷史記錄,所有網格都與當前網格相同。我做了一個簡單的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); 

回答

0

所以,我擡頭一看怎麼做了深刻的數組,這樣做是通過JSON字符串化如下圖所示。

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); 
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);

相關問題