1. 程式人生 > >實現深拷貝的各種方法:

實現深拷貝的各種方法:

實現深拷貝的各種方法:

1.使用ES6的語法

var a=[1,2,3]
var b=[...a]
b.push(4);
console.log(b);//1,2,3,4
console.log(a)//1,2,3

2.使用concat()方法

var a=[1,2,3]
var c=[];
var b=c.concat(a);
b.push(4);
console.log(b);//1,2,3,4
console.log(a)//1,2,3

3.使用slice()方法

var a=[1,2,3]
var b=a.slice(0);
b.push(4);
console.log(b);//1,2,3,4
console.log(a)//1,2,3

4.Object.assign()拷貝

以上四種當物件中只有一級屬性,沒有二級屬性的時候,此方法為深拷貝,但是物件中有物件的時候,此方法,在二級屬性以後就是淺拷貝

5.//使用遞迴的方式實現陣列、物件的深拷貝

function deepClone1(obj) {
  //判斷拷貝的要進行深拷貝的是陣列還是物件,是陣列的話進行陣列拷貝,物件的話進行物件拷貝
  var objClone = Array.isArray(obj) ? [] : {};
  //進行深拷貝的不能為空,並且是物件或者是
  if (obj && typeof obj === "object") {
    for (key in obj) {
      if (obj.hasOwnProperty(key)) {
        if (obj[key] && typeof obj[key] === "object") {
          objClone[key] = deepClone1(obj[key]);
        } else {
          objClone[key] = obj[key];
        }
      }
    }
  }
  return objClone;
}

6.使用JSON物件的stringify和parse方法

var a=[1,2,3]
var c=JSON.stringify(a);
var b=JSON.parse(c);
b.push(4);
console.log(b);//1,2,3,4
console.log(a)//1,2,3

此方法無法實現對物件中方法的深拷貝

7.通過jQuery的extend方法實現深拷貝

var array = [1,2,3,4];
var newArray = $.extend(true,[],array);

8.lodash函式庫實現深拷貝

lodash很熱門的函式庫,提供了 lodash.cloneDeep()實現深拷貝

參考:https://blog.csdn.net/chentony123/article/details/81428803
https://www.cnblogs.com/echolun/p/7889848.html