【发布时间】:2019-08-15 09:41:18
【问题描述】:
以下面的代码为例,splice 用于从 Array1 中恢复一个特定项目并存储在 Popped 中。然后popped被推入array2。但是,如果我删除弹出,为什么 array2 变得未定义,即使该值已经被推送。
let Array1 = [
{id: 1, name: "APPLES"},
{id: 2, name: "ORANGE"},
{id: 3, name: "PEAR"},
{id: 4, name: "MANGO"}];
let array2 = [];
let popped = Array1.splice(0, 1)
array2.push(popped);
console.log("Array2: ", array2[0][0].name)
document.querySelector("#First").innerHTML = "First: " + array2[0][0].name;
delete popped[0]; //why when we delete popped, value is undefined ?
document.querySelector("#Second").innerHTML = "Second: " + array2[0][0].name; // undefined
【问题讨论】:
-
因为 popped 和 array2[0] 是同一个数组:
array2.push(popped);: this stores popped in array2[0]。 -
好的,我该如何绕过这个问题?有什么解决办法吗?
-
到底是什么问题?如果您从数组中删除某些东西,它就会从数组中删除。相反将是一个相当大的问题。如果您不想删除某些内容,请不要删除它。如果您希望 array2[0] 与 popped 不同,则不要将 popped 推入 array2。如果需要,您可以推送数组的 副本。
-
我们可以在不删除 popped 原始内容的情况下推送 popped 的副本吗?怎么样?
-
按照我的理解,拼接发生在Array1上。弹出只是一个临时存储。它实际上是 Array1 物理上丢失了一个项目。
标签: javascript arrays typescript object ecmascript-6