2012-05-21 143 views
8

我想替换数组中的整个对象。替换对象数组中的元素

http://jsfiddle.net/CWSbJ/

var array = [ {name: "name1" }, { name: "name2" } ]; 
var element = array[0]; 
element = {name: "name3"}; 
alert(array[0].name); 

在这一段代码我期望输出NAME3,为什么不能在这样的阵列替换整个对象?有什么好办法做到这一点?

+1

你只是分配一个其他值'element',不'数组[0]' 。 –

回答

16

正确的方法是

array[0] = {name: "name3"}; 

预期现有的代码不工作,因为你正在服用和借鉴*的第一个元素与

var element = array[0]; 

,然后你替换值与另一个对象的本地变量。这使原始数组保持不变。

+0

稍有不正确的解释。 'element'不是复制,而是存储在'array [0]'中的对象的*引用*。更改'element.name'会影响'array [0] .name'。 – Deestan

+0

@Deestan:谢谢,修正。真的不知道我在想什么。 – Jon

+0

我认为你应该尝试数组[i] .name =“你赋值赋值”,如果你遵循数组[i] = {name:'something'},每个对象属性获取赋值只有名称所有将为null案件。 – Sudarshan

2

试试这个:

var array = [ {name: "name1" }, { name: "name2" } ]; 
array[0] = {name: "name3"}; 
alert(array[0].name); 

element是不实际的数组 - 它是一个数组的副本