我有一个包含一些子数组的数组,并且这些子数组包含一些对象,看起来像这样(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()
,唯一的区别是我的工作的子数组包含一个更大的对象,具有更多的键和值。
非常感谢有人告诉我我做错了什么。谢谢!
答案 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)