Ошибка JavaScript в array.pop ()? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть массив, который содержит несколько вложенных массивов, а вложенные массивы содержат некоторые объекты, которые выглядят примерно так (4 вложенных массива и первые 3 вложенных массива имеют полностью идентичное содержимое).

let mainArray = [
  [
    {
      'key1' : 'value1'
    },
    {
      'key2' : 'value2'
    }
  ],
  [
    {
      'key1' : 'value1'
    },
    {
      'key2' : 'value2'
    }
  ],
  [
    {
      'key1' : 'value1'
    },
    {
      'key2' : 'value2'
    }
  ],
  [
    {
      'key1' : 'value1'
    }
  ]
]

Теперь я хочу использовать Array.pop (), чтобы избавиться от последнего объекта первого подмассива key2 : value2, что должно привести к чему-то вроде этого.

let mainArray = [
  [
    {
      'key1' : 'value1'
    }
  ],
  [
    {
      'key1' : 'value1'
    },
    {
      'key2' : 'value2'
    }
  ],
  [
    {
      'key1' : 'value1'
    },
    {
      'key2' : 'value2'
    }
  ],
  [
    {
      'key1' : 'value1'
    }
  ]
]

Однако, когда япопытался запустить testArray [0] .pop (), он влияет не только на [0], но также на [1] и [2], что-то вроде этого.

let mainArray = [
  [
    {
      'key1' : 'value1'
    }
  ],
  [
    {
      'key1' : 'value1'
    }
  ],
  [
    {
      'key1' : 'value1'
    }
  ],
  [
    {
      'key1' : 'value1'
    }
  ]
]

Я пробовал на https://jsfiddle.net/vbp02Lmk/4/ и он отлично работает, но когда я использую его на своей работе, он пытается вытолкнуть все идентичное ..

ps код, который я написал для своей работы, также mainArray[0].pop(), и единственное отличиев том, что подмассивы для моей работы содержат более крупный объект с большим количеством ключей и значений.

Буду очень признателен, если кто-нибудь скажет мне, что я сделал не так.Спасибо!

1 Ответ

2 голосов
/ 16 мая 2019

Возможно, вы вставляете один и тот же object несколько раз в вашу локальную работу.Все они имеют одинаковую ссылку , поэтому, если вы удалите что-либо в первом sub-array, это изменит его для всех.Поскольку все вложенные массивы в вашем массиве, в основном, являются одним и тем же объектом с одинаковыми ссылками.

Проверьте пример для примера (учтите, что вывод фрагмента уже намекает на то, что он ссылается на один и тот же объект):

let elem = [{'key1' : 'value1'}, {'key2' : 'value2'}]

let arr = []

arr.push(elem)
arr.push(elem)
arr.push(elem)
arr.push(elem)

console.log(arr)

arr[0].pop()

console.log(arr)

А вот пример без той же справочной задачи:

let elem1 = [{'key1' : 'value1'}, {'key2' : 'value2'}]
let elem2 = [{'key1' : 'value1'}, {'key2' : 'value2'}]
let elem3 = [{'key1' : 'value1'}, {'key2' : 'value2'}]
let elem4 = [{'key1' : 'value1'}, {'key2' : 'value2'}]

let arr = []

arr.push(elem1)
arr.push(elem2)
arr.push(elem3)
arr.push(elem4)

console.log(arr)

arr[0].pop()

console.log(arr)
...