更改数组的值更改原始数组 JavaScript

IT技术 javascript arrays
2021-03-13 15:03:12

以下代码将 id 中的两个元素0都设置为-,即使我只想将一个元素设置为-1我只是创建了对 labelArray 的引用,还是其他什么?

labelArray.sort(compare);
valueArray = labelArray;
valueArray[0] = '-1';
labelArray[0] = '-';

感谢所有帮助。

更新(2019 年):自从我第一次写这篇文章已经好几年了,ES6 的使用非常普遍。所以,我想回来补充一点,而不是使用slice()已接受的答案中推荐方法,您可以在下面使用数组析构来制作副本:

valueArray = [...labelArray];
3个回答

是的。二者valueArraylabelArray引用相同的底层数组。要制作副本,请使用slice()

valueArray = labelArray.slice(0);

注意:Slice() 仅复制 1 级深度,这适用于原始数组。如果数组包含复杂对象,请使用类似 jQuery 的clone() 之类的东西,感谢@Jonathan。

谢谢大家,如果我确定这是一个我永远不需要问的对象。你的帮助很有启发性。
2021-04-27 15:03:12
@deth4uall 不是因为,本身,而是按照惯例。在许多面向对象语言中,对象与其引用不同,这与原语不同,这可能是因为编译器必须推断太多才能执行深度复制。
2021-05-12 15:03:12
@deth4uall 是的,JS中的变量、对象属性、数组槽都是引用值,不包含
2021-05-16 15:03:12

我只是创建了对 labelArray [...] 的引用吗?

对,就是这样。valueArray并且labelArray仍然标识未复制的相同对象。

valueArray只是对labelArray.

您想要做的是克隆阵列。您可以使用 jQuery.clone() 或类似的克隆函数来执行此操作。

该项目未使用 jQuery,因此目前不在桌面上。无论如何,我可能最终会转向 jQuery。
2021-04-26 15:03:12