如何将对象拆分为嵌套对象?(递归方式) [英] How to split object into nested object? (Recursive way)
本文介绍了如何将对象拆分为嵌套对象?(递归方式)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个包含下划线(_)变量名的数据集.如下:
I have a data set containing underscore(_) variable name. Such as below:
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'
}
我想将它们拆分为嵌套的对象/数组,下面是我想要的结果.
I want to split them into nested object/array, Below is the result I want.
{
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'}}}}
How can I write a recursive method to achive it instead of hardcoded? Maybe it should allow to handle deeper nested object such as "p_2_one_two_category: 'value'" into 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
方法,该方法将只用对象创建类似的嵌套结构.
You could use reduce
method that will create similar nested structure with just objects.
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)
这篇关于如何将对象拆分为嵌套对象?(递归方式)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文