2016-05-13 4 views
0

私はJSONデータを持っており、そのデータをオブジェクトの配列に変換し、 .slice(0)メソッドを使用する別の配列。array1.splice(1,1)は、array1.slice(0)を使用して作成したarray2からデータを削除しています

割り当てられた配列からいくつかの要素を削除しようとしているとき、元の要素から同じ要素を削除しています。

しかし、いつでもオリジナルのアレイを変更したくありません。

var values = [ 
    { 
    "timeId":"201501010100", 
    "Week1Volume": 2454721, 
    "Week2Volume": 7017731, 
    "Week3Volume": 5656528, 
    "Week4Volume": 2472223 
    }, 
    { 
    "timeId":"201501010200", 
    "Week1Volume": 2454721, 
    "Week2Volume": 7017731, 
    "Week3Volume": 5656528, 
    "Week4Volume": 2472223 
    }, 
    { 
    "timeId":"201501010300", 
    "Week1Volume": 1999120, 
    "Week2Volume": 5355235, 
    "Week3Volume": 5120254, 
    "Week4Volume": 2607672 
    }]; // This is my JSON data 

var weekNames = d3.keys(values[0]).filter(function(key) { return key !== "timeId" && key!== "weeksVolume";});; 

values.forEach(function(d) { 
    d.weeksVolume = weekNames.map(function(name) { return {name: name, value: +d[name]}; }); 
}); // original array 

var data = values.slice(0); // Data is my new array 

function removeFromSecondArray(){ 

    // Here I am removing the first object of weekVolumes from each object of the array 
    data.forEach(function(d) { 
     d.weeksVolume.splice(1,1); 
     }); 
}; 

しかし、上記の機能の実行後、「値」の第1要素も削除されました。

+0

この回答をご覧ください:http://stackoverflow.com/questions/37006725/creating-series-from-series-in-d3/37007424#37007424それはあなたを助けるかもしれません – thatOneGuy

答えて

1

は、おそらくこれはあなたの問題である:

あなたが古いオブジェクトへの参照を作成しているJSONオブジェクトをコピーしています。したがって、1つの参照に対して実行された操作は、両方のオブジェクトに対して実行されます。 このように深いコピーを適用してから、さらに操作を適用する必要があります。

var newObj=JSON.parse(JSON.stringify(oldObj)); 

これがあなたに役立つことを願っています。これはディープコピーです。それは参照を作成しません。

関連する問題