扁平化对象转普通对象

本文最后更新于:2023年3月19日 晚上

扁平化对象转普通对象

实现一个函数,将扁平化对象转换为“嵌套”字典对象的功能。
输入

1
2
3
4
5
6
7
{
"A": 1,
"B.A": 2,
"B.B": 4,
"CC.D.E": 3,
"CC.D.F": 5
}

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"A": 1,
"B": {
"A": 2,
"B": 4
},
"CC": {
"D": {
"E": 3,
"F": 5
}
}
}

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const formatObject = (obj: object): object => {
const res = {};
const keys = Reflect.ownKeys(obj);
for (const key of keys) {
if ((<string>key).includes(".")) {
const keyArr = (<string>key).split(".");
keyArr.reduce((a: object, b: string, index: number): object => {
if (index === keyArr.length - 1) a[b] = obj[key];
if (!a[b]) a[b] = {};
return a[b];
}, res);
} else res[key] = obj[key];
}
return res;
};

formatObject({
A: 1,
"B.A": 2,
"B.B": 4,
"CC.D.E": 3,
"CC.D.F": 5,
});