2017-06-02 9 views
0

にコードを単純化して、それを簡単にするように単純化しますが、プレイヤーのゲームピースを追跡するグリッド上でゲームを作っています。配列が変更されたら配列ヒストリ配列

9x9グリッドの場合、配列には9個のインデックスがあり、それぞれに9個のインデックスが含まれているので、グリッド上の点を配列[x] [y]として参照できます。毎回、この配置をグリッド履歴配列に保存したいと思います。

Iveは毎回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);

関連する問題