2016-06-20 17 views

答えて

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

、 '[] .splice(0,0は、ARR);'プリミティブ – kirinthos

+0

ごめん '[] .concat(ARR)' – kirinthos

+0

@kirinthosのコピーを行いますいいえ。あなたも同じ問題を抱えています。ここで確認してください:https://jsfiddle.net/jbL0vm9m/ – Sergio

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]); 
関連する問題