オブジェクトの配列を別の配列に割り当てようとしていますが、新しい配列を作成したときにその値を変更すると、元の配列も変更されますよくない)。別の方法を使うことができますか? これは例です。http://codepen.io/Xiwi/pen/rLMbYpオブジェクトの配列の配列を新しい配列に割り当てます。
2
A
答えて
3
参照を変更しないように、配列をコピー/クローンする必要があります。あなたは、このように行うことができます配列にのみPrimitive Typesをお持ちの場合は
は:
var test3 = JSON.parse(JSON.stringify(test2));
そうでなければ、再帰的なソリューションを必要とし、あなたの質問でより具体的に。
例:
var test1 = [{name: 'test1'}];
var test2 = [{name: 'test2'}];
var test3 = JSON.parse(JSON.stringify(test2));
test3[0].name = 'test3';
// Open console
console.log('Test2: ',test2[0]); // Object {name: "test2"}
console.log('Test3: ',test3[0]); // Object {name: "test3"}
0
オブジェクトは、本質的に言及しています。あなたは、新しいオブジェクトを作成し、別のオブジェクトの値を割り当てる必要があります。
var test3 = [ Object.assign({}, test2[0]) ];
0
は、別のオブジェクトの1つの配列をコピーする簡単な.map
を使用してください。私は信じてあなたがシリアライズする必要はありません
var test1 = [{name: 'test1'}];
var test2 = [{name: 'test2'}];
//var test3 = test2.slice(0); //doesn't work. objects are still references
var test3 = test2.map(function(obj){
//return obj; //doesn't work. objects are still references
var o={}; //create brand new object
for(var prop in obj)
o[prop]=obj[prop];//assign properties
return o;//works
});
test3[0].name = 'test3';
// Open console
console.log('Test2: ',test2[0]);
console.log('Test3: ',test3[0]);
関連する問題
- 1. オブジェクト配列のメモリ割り当て
- 2. オブジェクト配列の割り当て問題
- 3. 割り当ての配列
- 4. SwiftyJSONオブジェクトを文字列配列に割り当てます。
- 5. 配列の配列の配列にメモリを割り当てる方法
- 6. 割り当て配列
- 7. 割り当て、配列は
- 8. 配列メモリ割り当て
- 9. 配列へのポインタの配列の割り当て
- 10. C/C++で配列の配列を割り当てる
- 11. 構造体ポインタのメモリ割り当て配列を配列
- 12. 配列の特定のオブジェクトをオブジェクトの別の配列に割り当てる方法はありますか?
- 13. ループのない配列割り当て
- 14. オブジェクトのセル配列を事前に割り当てます
- 15. オブジェクトの名前からオブジェクトの新しい配列への配列の配列
- 16. 配列に画像を割り当て、
- 17. タプルを配列に割り当てる
- 18. F#ギザギザの配列の割り当て
- 19. Verilogの配列の割り当て
- 20. Javaでの配列の割り当て
- 21. 配列のメモリの割り当て
- 22. cの配列のメモリ割り当て
- 23. ポインタへの*&配列の割り当て
- 24. 割り当て新しい配列のキー
- 25. 新しい配列の配列として配列の2つの配列を連続して配列する
- 26. ダイナミック2Dキャラクタ配列の割り当て
- 27. Easy C++配列の割り当て
- 28. PHPループ配列の割り当て
- 29. Ruby 2D配列の割り当て
- 30. Julia:配列の割り当て動作
、 '[] .splice(0,0は、ARR);'プリミティブ – kirinthos
ごめん '[] .concat(ARR)' – kirinthos
@kirinthosのコピーを行いますいいえ。あなたも同じ問題を抱えています。ここで確認してください:https://jsfiddle.net/jbL0vm9m/ – Sergio