# 合并两个对象
两个对象合并成一个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
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
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