鍍金池/ 問(wèn)答/HTML/ 包含對(duì)象的復(fù)雜數(shù)組深拷貝

包含對(duì)象的復(fù)雜數(shù)組深拷貝

let arr = [
    {name: 'Bob', age: 12},
    {name: 'Lucy', age: 10},
    {name: 'Alix', age: 11}
]

let arr1 = [...arr]
arr1[0].age = 99

console.log(arr[0].age) // 99

顯而易見(jiàn):es6 的這種拷貝數(shù)組方法不合適,因?yàn)?arr 里的都是對(duì)象,那現(xiàn)在問(wèn)題就是如何深拷貝 arr 這個(gè)數(shù)組?

回答
編輯回答
心上人

Emmmm,最簡(jiǎn)單的辦法嘛...

arrCopy = JSON.parse(JSON.stringify(arr))

復(fù)雜一點(diǎn)的話(huà),自己寫(xiě)一個(gè)遞歸咯。

2017年12月29日 06:56
編輯回答
帥到炸

為什么不用lodash的深度克隆技術(shù)?一行代碼搞定,優(yōu)雅直觀:

let arr1 = _.cloneDeep(arr);
2017年12月11日 11:45
編輯回答
久舊酒

這種應(yīng)當(dāng)算解構(gòu)賦值吧,簡(jiǎn)單點(diǎn)理解就是arr1[0] = arr[0],arr1[1]=arr[1]...所以應(yīng)當(dāng)是個(gè)引用賦值,淺的不行。用JSON拷貝的話(huà),對(duì)象的方法復(fù)制不出去??梢栽囈幌耺ap結(jié)合assign,或者遞歸復(fù)制

2017年12月31日 12:14
編輯回答
尛憇藌

遞歸調(diào)用淺拷貝吧。

  function deepCopy(p, c) {
    var c = c || {};
    for (var i in p) {
      if (typeof p[i] === 'object') {
        c[i] = (p[i].constructor === Array) ? [] : {};
        deepCopy(p[i], c[i]);
      } else {
         c[i] = p[i];
      }
    }
    return c;
  }
2018年4月23日 04:21