对不起,非常基本的问题,我是新来的。
如果我有一个数组并将其传递给一个新变量(newArray = oldArray),然后从 newArray 中删除一个元素,它似乎也会影响 oldArray。
我的猜测是它只是创建了对同一变量的新引用,因此存储在 oldArray 中的数据现在有两个标识符?
如果是这样,我实际上如何将 oldArray 中的元素传递到 newArray 中,以便 newArray 独立于 oldArray?
提前致谢
对不起,非常基本的问题,我是新来的。
如果我有一个数组并将其传递给一个新变量(newArray = oldArray),然后从 newArray 中删除一个元素,它似乎也会影响 oldArray。
我的猜测是它只是创建了对同一变量的新引用,因此存储在 oldArray 中的数据现在有两个标识符?
如果是这样,我实际上如何将 oldArray 中的元素传递到 newArray 中,以便 newArray 独立于 oldArray?
提前致谢
我的猜测是它只是创建了对同一变量的新引用,因此存储在 oldArray 中的数据现在有两个标识符?
对,你的新变量和旧变量都指向同一个数组。通过一个引用(变量)对数组进行的操作通过另一个引用自然可见,因为只有一个数组。
为避免这种情况,您必须制作数组的副本。有几种方法可以做到这一点,其中一种是使用slice
:
var newArray = oldArray.slice(0);
slice
返回从给定索引开始的数组的浅表副本。如果你给它 index 0
,它会复制整个数组。
最快的方法是使用数组函数返回一个新的数组实例。通常,我使用:
var newArray = oldArray.slice(0);
在这种情况下,您必须使用 slice 方法克隆数组:
newArray = oldArray.slice(0);