2012-05-21 10 views
8

配列内のオブジェクト全体を置換したい。私は、出力NAME3を期待するコードのこの部分で オブジェクト配列内の要素を置換する

http://jsfiddle.net/CWSbJ/

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

は、なぜ私はこのような配列内のオブジェクト全体を置き換えることはできませんか?これを行う良い方法は何ですか?

+1

配列のコピーを、しないように'配列[0] ' 。 –

答えて

16

正しい方法は、あなたが

var element = array[0]; 

で最初の要素をreferenc *を取っているので、

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

既存のコードが期待通りに動作しないで、その後、あなたは値を置き換えるありますこのローカル変数には別のオブジェクトが含まれています。これにより元の配列は変更されません。

+0

説明が少し間違っています。 'element'はコピーではなく、' array [0] 'に格納されたオブジェクトへの参照*です。 'element.name'を変更すると' array [0] .name'に影響します。 – Deestan

+0

@Deestan:ありがとう、固定。私が何を考えているのか本当に知りません。 – Jon

+0

array [i] = name = 'something'}に従うならば、array [i] .name = "assign you to assign"を試してみるべきだと思います。すべてのオブジェクトプロパティは名前だけで割り当てられます。場合。 – Sudarshan

2

これを試してみてください:

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

element

は、実際の配列ではありません - あなただけのelement` `に他の値を代入している

関連する問題