JS - 合并两个对象

# 合并两个对象

两个对象合并成一个JSON, 其中对象的key为点语法拼接的字符串

const data1 = {"a.b.c": 1, "a.b.d": 2};
const data2 = {"a.b.e": 3, "a.b.f": 4};
const mergedObj = mergeObj(data1, data2);
1
2
3

实现思路: 利用 reduce 可重新构造对象, 引用类型的可变性来缓存值

点击查看代码




 


























function mergeObj(...data) {
  return data.reduce((prev, obj) => {
    Object.keys(obj).forEach(key => {
      const keys = key.split('.')
      let nestedObj = prev
      for (let i = 0; i < keys.length - 1; i++) {
        const k = keys[i];
        nestedObj[k] = nestedObj[k] || {}
        nestedObj = nestedObj[k]
      }
      nestedObj[keys[keys.length - 1]] = obj[key]
    })

  return prev
  }, {})
}

const mergedObj = mergeObj(data1, data2)

console.log('mergedObj -- ', mergedObj)
// {
//   a: {
//     b: {
//       c: 1,
//       d: 2,
//       e: 3,
//       f: 4,
//     },
//   },
// }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30