1

对不起,非常基本的问题,我是新来的。

如果我有一个数组并将其传递给一个新变量(newArray = oldArray),然后从 newArray 中删除一个元素,它似乎也会影响 oldArray。

我的猜测是它只是创建了对同一变量的新引用,因此存储在 oldArray 中的数据现在有两个标识符?

如果是这样,我实际上如何将 oldArray 中的元素传递到 newArray 中,以便 newArray 独立于 oldArray?

提前致谢

4

4 回答 4

1

我的猜测是它只是创建了对同一变量的新引用,因此存储在 oldArray 中的数据现在有两个标识符?

对,你的新变量和旧变量都指向同一个数组。通过一个引用(变量)对数组进行的操作通过另一个引用自然可见,因为只有一个数组。

为避免这种情况,您必须制作数组的副本。有几种方法可以做到这一点,其中一种是使用slice

var newArray = oldArray.slice(0);

slice返回从给定索引开始的数组的浅表副本。如果你给它 index 0,它会复制整个数组。

于 2013-04-15T20:53:32.307 回答
0

最快的方法是使用数组函数返回一个新的数组实例。通常,我使用:

var newArray = oldArray.slice(0);
于 2013-04-15T20:53:18.367 回答
0

在这种情况下,您必须使用 slice 方法克隆数组:

newArray = oldArray.slice(0);
于 2013-04-15T20:53:21.843 回答
0

正如您所了解的,当您复制数组变量时,您复制了对原始变量的引用。

这是制作真实副本的一个习惯 -从第一个元素请求切片

 var newArray = oldArray.slice(0);
于 2013-04-15T20:53:27.430 回答