js配列の深浅コピーjsオブジェクトの深浅コピー


一、配列の深浅コピー
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; 
}