js配列の深浅コピーjsオブジェクトの深浅コピー
一、配列の深浅コピー
JavaScriptを使って配列を操作する時、私達は常に行列をバックアップする必要があります.事実は簡単に他の変数を付与するだけであれば、私達はその中のいずれかを変更すれば、他のものも変化します.これは問題の発生を引き起こします.
JavaScriptを使って配列を操作する時、私達は常に行列をバックアップする必要があります.事実は簡単に他の変数を付与するだけであれば、私達はその中のいずれかを変更すれば、他のものも変化します.これは問題の発生を引き起こします.
var arr = ["One","Two","Three"];var arrto = arr;
arrto[1] = "test";
document.writeln(" :" + arr + "
");//Export: :One,test,Threedocument.writeln(" :" + arrto + "
");//Export: :One,test,Three
上のように直接的に値を賦課する方式は浅いコピーです.多くの場合、このように私達がほしい結果ではなくて、実は私達が欲しいのはarrの値が不変ではないですか? 方法1:jsのslice関数 array slice ,
。( )
arrayObj.slice(start, [end])
arrayObj
。 Array 。
start
。arrayObj 。
end
。arrayObj 。
slice Array , arrayObj 。
slice end , 。 start , length + start , length 。 end , length + end , length 。 end , slice arrayObj 。 end start , 。
var arr = ["One","Two","Three"];var arrtoo = arr.slice(0);
arrtoo[1] = "set Map";
document.writeln(" :" + arr + "
");//Export: :One,Two,Three
document.writeln(" :" + arrtoo + "
");//Export: :One,set Map,Three
方法二:jsのconcat方法 concat() 。
, 。
arrayObject.concat(arrayX,arrayX,......,arrayX)
。 arrayX arrayObject 。 concat() , , 。
var arr = ["One","Two","Three"];var arrtooo = arr.concat();
arrtooo[1] = "set Map To";
document.writeln(" :" + arr + "
");//Export: :One,Two,Three
document.writeln(" :" + arrtooo + "
");//Export: :One,set Map To,Three
二、対象の深浅コピーvar a={name:'yy',age:26};var b=new Object();
b.name=a.name;
b.age=a.age;
a.name='xx';
console.log(b);//Object { name="yy", age=26}console.log(a);//Object { name="xx", age=26}
オブジェクトの属性を巡回して、新しいオブジェクトを付与します.var deepCopy= function(source) {
var result={};
for (var key in source) {
result[key] = typeof source[key]===’object’? deepCoyp(source[key]): source[key];
}
return result;
}