У меня есть данные JSON, и я преобразовал эти данные в массив объектов и присвоил этот массив другому массиву с использованием метода.slice(0).
Когда я пытаюсь удалить какой-либо элемент из назначенного массива, он удаляет один и тот же элемент из исходного элемента.
Но я не хочу менять исходный массив в любой момент времени.
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-й элемент "значений" также удалился.
Возможно, это ваша проблема:
Когда вы копируете объект JSON, вы создаете ссылку на старый объект. Таким образом, любая операция, выполняемая по одной ссылке, будет выполняться на обоих объектах. Таким образом, вы должны применить здесь глубокую копию, а затем применить дальнейшие манипуляции.
var newObj=JSON.parse(JSON.stringify(oldObj));
Я надеюсь, что это поможет вам. Это глубокая копия. Он не будет создавать ссылку.