【发布时间】:2020-04-08 15:18:20
【问题描述】:
我有一个包含下划线(_)变量名称的数据集。如下:
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);
【问题讨论】:
-
您的代码和 Nenad 答案中的代码都会生成与您的示例输出略有不同的内容。 (
m是一个普通对象,而不是单一属性对象的数组。)这些结果似乎比您的示例输出更合乎逻辑。那是你真正想要的吗? -
@ScottSauyet ops,我输入了错误的结果,我已经更新了它,但我的 sn-p 与他所做的相同。是的,这就是我想要的......谢谢
标签: javascript arrays object recursion