0

for ループで問題が発生しました

var a={ name:""};
var nameList=['jack','luck'];
var data=[];
for(var i=0;i<nameList.length;i++){
   a.name=nameList[i];
   data.push(a);
}
console.log(data) //output [Object { name="luck"}, Object { name="luck"}]

必要なデータは [Object { name="jack"}, Object { name="luck"}] です。

そして、ループ内でコードをdata.push({name:nameList[i]})とに変更するとdata[i] = {name:nameList[i]}、どちらも期待どおりの正しい値を返します。

何が違うのか誰か教えてくれませんか?

4

3 に答える 3

4

オブジェクトは 1 つしかなく、その名前を繰り返し変更し、それへの参照を配列にプッシュしています。これは、JavaScript で変数がどのように機能するかです。コピーは値によって行われ、オブジェクトを保持する変数の値はオブジェクトへの参照です。

反復ごとに新しいオブジェクトを作成する必要があります。

for(var i=0;i<nameList.length;i++){
   a = { name: nameList[i] }
   data.push(a);
}
于 2013-10-25T01:57:46.893 に答える
4

同じオブジェクトを配列に何度もプッシュしていて、nameプロパティを変更するたびに、毎回同じオブジェクトで変更しているだけです。それぞれが異なるように、オブジェクトの新しいコピーを毎回作成する必要があります。次のような中間変数を使用しなくても、それを行うことができます。

var nameList = ['jack','luck'];
var data = [];
for(var i = 0; i < nameList.length; i++){
   data.push({name: nameList[i]});    // creates a new object each time thru the loop
}

または、中間オブジェクトが必要な場合(他の理由で-表示したコードには必要ありません)、次のように機能します。

var nameList = ['jack','luck'];
var data = [], a;
for(var i = 0; i < nameList.length; i++){
   a = {};
   a.name = nameList[i];
   data.push(a);
}

a毎回新しいオブジェクトを作成して配列にプッシュするように、ループを介して毎回新しいオブジェクトがどのように割り当てられるかに注意してください。

于 2013-10-25T01:58:19.677 に答える
0

a両方の配列要素で使用しています。同じオブジェクトです。2 回目に名前を変更すると、両方の名前が変更されます。

于 2013-10-25T01:59:17.853 に答える