2012-01-26 109 views
4

以下代码会将id 0中的两个元素设置为-,即使我只希望将其中一个设置为-1。我只是创建了对labelArray的引用,还是其他的东西?更改数组的值更改原始数组JavaScript

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

所有帮助表示赞赏。

回答

7

是的。 valueArraylabelArray都引用相同的底层阵列。进行复印,使用slice()

valueArray = labelArray.slice(0); 

注:切片()只复制1级深,这对于基本数组正常工作。如果数组包含复杂的对象,请使用jQuery的clone(),credit @Jonathan。

+0

+1分片。 – ruakh

+0

那是因为它是一个正确的对象? – OpensaurusRex

+2

@ deth4uall是的,JS所有_reference_值中的变量,对象属性和数组插槽,它们不包含_contain_它们。 – Phrogz

2

我只是创建一个对labelArray […]的引用?

是的,正好。 valueArraylabelArray仍然标识尚未被复制的相同对象。

1

valueArray只是对labelArray的引用。

你想要做的就是复制数组。你可以使用jQuery.clone()或类似的克隆函数来做到这一点。

+1

该项目不使用jQuery,因此现在不在表格中。无论如何,我可能最终会转向jQuery。 – OpensaurusRex