js 数据深度合并 - 戴向天

385 阅读1分钟

大家好!我叫戴向天

QQ群:602504799

如若有不理解的,可加QQ群进行咨询了解

getType详情地址 juejin.cn/post/699055…


// 数据进行深度合并
function dataDeepMerge (baseObj, newObj) {
  // 遍历每一个key名
  for (const key in newObj) {
    // 判断原数据是否有相同的字段名称
    if (key in baseObj) {
      // 获取当前key值数据类型
      const baseType = getType(baseObj[key])
      // 获取需要被合并的key值数据类型
      const newType = getType(newObj[key])
      // 判断数据类型是否一致
      if (baseType === newType) {
        // 判断是不是json数据
        if (baseType === 'json') {
          // 递归处理
          baseObj[key] = dataDeepMerge(baseObj[key], newObj[key])
        } else if (baseType === 'array') { // 判断是不是数组
          const arr = baseObj[key].concat(newObj[key])
          // 去重合并
          baseObj[key] = [...new Set(arr.map(t => JSON.stringify(t)))].map(s => JSON.parse(s))
        } else {
          // 其它的数据类型处理
          baseObj[key] = newObj[key]
        }
      } else {
        // 当数据类型不一致的时候进行处理
        baseObj[key] = newObj[key]
      }
    } else {
      // 在原数据上面添加相对应的数据信息
      baseObj[key] = newObj[key]
    }
  }
  // 返回最终的结果
  return baseObj
}