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' }

 

相关文章
相关标签/搜索