array.pop()上的Javascript错误?

时间:2019-05-16 08:03:45

标签: javascript arrays pop

我有一个包含一些子数组的数组,并且这些子数组包含一些对象,看起来像这样(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/上尝试了它,并且效果很好,但是当我在作品中使用它时,它会尝试弹出所有相同的内容。

p.s我为我的工作编写的代码也是mainArray[0].pop(),唯一的区别是我的工作的子数组包含一个更大的对象,具有更多的键和值。

非常感谢有人告诉我我做错了什么。谢谢!

1 个答案:

答案 0 :(得分:2)

您可能在本地工作中多次插入相同的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)