1. 程式人生 > 其它 >leetcode-0142 linked-list-cycle-ii

leetcode-0142 linked-list-cycle-ii

一、陣列的深淺拷貝

在使用JavaScript對陣列進行操作的時候,我們經常需要將陣列進行備份,事實證明如果只是簡單的將它賦予其他變數,那麼我們只要更改其中的任何一個,然後其他的也會跟著改變,這就導致了問題的發生。

var arr = ["One","Two","Three"];

var arrto = arr;
arrto[1] = "test";
document.writeln("陣列的原始值:" + arr + "<br />");//Export:陣列的原始值:One,test,Three
document.writeln("陣列的新值:" + arrto + "<br />");//Export:陣列的新值:One,test,Three

像上面的這種直接賦值的方式就是淺拷貝,很多時候,這樣並不是我們想要得到的結果,其實我們想要的是arr的值不變,不是嗎?
方法一:js的slice函式

var arr = ["One","Two","Three"];

var arrtoo = arr.slice(0);
arrtoo[1] = "set Map";
document.writeln("陣列的原始值:" + arr + "<br />");//Export:陣列的原始值:One,Two,Three
document.writeln("陣列的新值:" + arrtoo + "<br />");//Export:陣列的新值:One,set Map,Three

方法二:js的concat方法


var arr = ["One","Two","Three"];

var arrtooo = arr.concat();
arrtooo[1] = "set Map To";
document.writeln("陣列的原始值:" + arr + "<br />");//Export:陣列的原始值:One,Two,Three
document.writeln("陣列的新值:" + arrtooo + "<br />");//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; 
}