array1.splice (1,1) удаляет данные из array2, которые я создал с помощью array1.slice (0)

0

У меня есть данные 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-й элемент "значений" также удалился.

Теги:
d3.js
arrays

1 ответ

0
Лучший ответ

Возможно, это ваша проблема:

Когда вы копируете объект JSON, вы создаете ссылку на старый объект. Таким образом, любая операция, выполняемая по одной ссылке, будет выполняться на обоих объектах. Таким образом, вы должны применить здесь глубокую копию, а затем применить дальнейшие манипуляции.

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

Я надеюсь, что это поможет вам. Это глубокая копия. Он не будет создавать ссылку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню