js實現深度拷貝

js實現拷貝,使用普通賦值對象,在操做其中一個對象值的時候,另外一個也會更改,不符合需求數組

所以引入深度拷貝,如下爲實現深度拷貝的幾種法:spa

 

Object.assign

// 合併多個對象
var target = { a: 1, b: 1 };
var source1 = { b: 2, c: 2 };
var source2 = { c: 3 };
Object.assign(target, source1, source2);

注意: 這個是僞深度拷貝,只能拷貝第一層code

 

遞歸拷貝

function deepClone(source){
  const targetObj = source.constructor === Array ? [] : {}; // 判斷複製的目標是數組仍是對象
  for(let keys in source){ // 遍歷目標
    if(source.hasOwnProperty(keys)){
      if(source[keys] && typeof source[keys] === 'object'){ // 若是值是對象,就遞歸一下
        targetObj[keys] = source[keys].constructor === Array ? [] : {};
        targetObj[keys] = deepClone(source[keys]);
      }else{ // 若是不是,就直接賦值
        targetObj[keys] = source[keys];
      }
    }
  }
  return targetObj;
} 

 

... 拼接對象

let obj = {
    name: 'admin'
}

let obj2 = {
    age: 14,
    ...obj
}

console.log(obj2)     // { age: 14, name: 'admin' }

 

相關文章
相關標籤/搜索