gpt4 book ai didi

javascript - 如何将对象拆分为嵌套对象? (递归方式)

转载 作者:行者123 更新时间:2023-12-01 15:03:23 24 4
gpt4 key购买 nike

我有一个包含下划线(_)变量名称的数据集。比如下图:

const data = {
m_name: 'my name',
m_address: 'my address',
p_1_category: 'cat 1',
p_1_name: 'name 1',
p_2_category: 'cat 2',
p_2_name: 'name 2'
}

我想将它们拆分为嵌套对象/数组,下面是我想要的结果。
{
m: {
name: "my name",
address: "my address"
},
p: {
"1": {category: 'cat 1', name: 'name 1'},
"2": {category: 'cat 2', name: 'name 2'}
}
}

如何编写递归方法来实现它而不是硬编码?
也许它应该允许处理更深的嵌套对象,例如 "p_2_one_two_category: 'value'"到 p:{2:{one:{two:category:'value'}}}

var data ={
m_name: 'my name',
m_address: 'my address',
p_1_category: 'cat 1',
p_1_name: 'name 1',
p_2_category: 'cat 2',
p_2_name: 'name 2',
p_2_contact: '1234567',
k_id: 111,
k_name: 'abc'
}

var o ={};
Object.keys(data).forEach(key => {
var splited = key.split(/_(.+)/);
if (!o[splited[0]]) {
o[splited[0]] = {};
}
var splited1 = splited[1].split(/_(.+)/);
if (splited1.length < 3) {
o[splited[0]][splited[1]] = data[key];
} else {
if (!o[splited[0]][splited1[0]]){
o[splited[0]][splited1[0]] = {};
}
o[splited[0]][splited1[0]][splited1[1]] = data[key];
}
});
console.log(o);

最佳答案

您可以使用 reduce 方法,该方法将仅使用对象创建类似的嵌套结构。

var data = {
m_name: 'my name',
m_address: 'my address',
p_1_category: 'cat 1',
p_1_name: 'name 1',
p_2_category: 'cat 2',
p_2_name: 'name 2',
p_2_contact: '1234567',
k_id: 111,
k_name: 'abc'
}


const result = Object
.entries(data)
.reduce((a, [k, v]) => {
k.split('_').reduce((r, e, i, arr) => {
return r[e] || (r[e] = arr[i + 1] ? {} : v)
}, a)

return a
}, {})

console.log(result)

关于javascript - 如何将对象拆分为嵌套对象? (递归方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61104150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com