手写深浅拷贝

104 阅读1分钟

克隆

克隆考虑基本数据类型、对象以及数组的克隆

常见浅拷贝的方式:Object.assign()扩展运算符

浅克隆

function clone(option) {
  //判断是否是数组
  if(Array.isArray(option)) {
    return option.slice()   //相当于拷贝了数组
  } else if(typeof option == "object"){ //判断是否是对象
    return Object.assign({},option)
  } else{ //基础数据类型的克隆
    return option
  }
}

深克隆

当一个对象中层层嵌套多个对象时,浅克隆就只能克隆地址了。需要用到递归的方法将对象或数组进行深克隆

function clone(option, deep) {
  //判断是否是数组
  if (Array.isArray(option)) {
    var newArr = [];
    if (deep) {
      for (let i = 0; i < option.length; i++) {
        newArr.push(clone(option[i], deep));
      }
      return newArr
    } else {
      return option.slice();
    }
  } else if (typeof option == "object") {
    //判断是否是对象
    var newObj = {};
    for (const prop in option) {
      if (deep) {
        newObj[prop] = clone(option[prop], deep); //递归调用克隆
      } else {
        newObj[prop] = option[prop];
      }
    }
    return newObj;
  } else {
    //基础数据类型的克隆
    return option; //递归出口
  }
}