通过展平路径生成嵌套对象



我有这样的嵌套对象

{
"incl_1_1": "val_incl_1_1",
"incl_1_2": "val_incl_1_2",
"incl_1_1_child": {
"incl_2_1": "val_incl_2_1",
"incl_2_2": "val_incl_2_2",
},
"incl_1_2_child": {
"incl_2_1": "val_incl_2_1",
"incl_2_2": "val_incl_2_2",
}
}

编写递归函数将其压平,所以我有

{
incl_1_1: 'val_incl_1_1',
incl_1_2: 'val_incl_1_2',
'incl_1_1_child.incl_2_1': 'val_incl_2_1',
'incl_1_1_child.incl_2_2': 'val_incl_2_2',
'incl_1_2_child.incl_2_1': 'val_incl_2_1',
'incl_1_2_child.incl_2_2': 'val_incl_2_2'
}

现在我需要写一个函数来从flatten中获取原始嵌套对象,我被卡住了

您可以采用递归方法,并在最后从条目中构建一个对象。

const
getEntries = object => Object
.entries(object)
.flatMap(([k, v]) => v && typeof v === 'object'
? getEntries(v).map(([l, v]) => [`${k}.${l}`, v])
: [[k, v]]
),
data = { a: "aa", b: "bb", c: { d: "dd", e: "ee" }, f: { g: "gg", g: "gg", h: { i: 'ii' } } },
result = Object.fromEntries(getEntries(data));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

您可以对所提供的示例执行类似的操作。

const obj = {
incl_1_1: 'val_incl_1_1',
incl_1_2: 'val_incl_1_2',
'incl_1_1_child.incl_2_1': 'val_incl_2_1',
'incl_1_1_child.incl_2_2': 'val_incl_2_2',
'incl_1_2_child.incl_2_1': 'val_incl_2_1',
'incl_1_2_child.incl_2_2': 'val_incl_2_2'
}
const original={}
const keys = Object.keys(obj)

for(let i=0; i<keys.length; i++){
let prop, nested
if (!keys[i].includes(".")){
original[keys[i]] = obj[keys[i]] 
} else {
prop= keys[i].split('.')[0]
nested = keys[i].split('.')[1]
original[prop] ? original[prop][nested] =obj[keys[i]] : original[prop] = {[`${nested}`]: obj[keys[i]]}
}
}
console.log(original)

最新更新