leetcode-0142 linked-list-cycle-ii
阿新 • • 發佈:2022-05-09
一、陣列的深淺拷貝
在使用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; }