JavaScript-对象混合与克隆

93 阅读1分钟

对象混合

对象混合就是把多个对象混合为一个,如果有相同的属性,后面的会覆盖前面的

//混合这里比较简单的,首先我们自己来写一个对象混合函数
function mixin(...params) {
  let newObj = {};
  params.reverse().forEach((ele, index) => {
    for (let prop in ele) {
      if (!newObj[prop]) {
        newObj[prop] = ele[prop];
      }
    }
  });
  return newObj;
}
//实际上js也提供了混合函数,
let obj1 = {a:'1'};
let obj2 = {b:'2'};
let res = Object.assign(obj1,obj2);
//这样也可以得到混合的结果,但是这样会有一个缺陷,就是会改变obj1的值
let res = Object.assign({},obj1,obj2);//所以使用这样的方式更佳

对象克隆

首先克隆这里会有浅克隆与深度克隆

  • 浅克隆比较简单,直接复制地址就好
  • 深度克隆的话,就需要遍历每个属性,重新复制了

来看一下代码的逻辑

类型方式
原始类型,函数直接赋值
对象类型,数组类型通过递归逐个遍历,进行赋值
/**
 * 对象克隆
 * @param {*} params 传递的参数
 * @param {*} deep 是否进行深度克隆
 */
function clone(params, deep) {
  if (Array.isArray(params)) {
    // 处理数组
    let newArr = [];
    if (deep) {
      for (let prop of params) {
        newArr.push(clone(prop, deep));
      }
      return newArr;
    } else return params;
  } else if (typeof params == "object") {
    //处理对象
    if (params == null) return params;
    let newObj = {};
    if (deep) {
      for (let prop in params) {
        newObj[prop] = clone(params[prop], deep);
      }
      return newObj;
    } else return params;
  } else {
    //处理函数与原始类型
    return params;
  }
}