js object flatten:深度循环Json个objects,然后把objects flatten?
js object flatten:Deep loop Json objects, then flatten the objects?
我的JSON对象数据:
{
"title": "aa",
"desc": ["i", "j", "k"],
"cnt": {
"head": "bb",
"main": {
"num1": {
"time1": "mm",
"time2": "kk"
},
"num2": "dd"
}
}
}
我的问题是:如何使用 JavaScript 将上面的 JSON 对象翻译成下面的对象?
{
"title": "aa",
"desc": ["i", "j", "k"],
"cnt_head": "bb",
"cnt_main_num1_time1": "mm",
"cnt_main_num1_time2": "kk",
"cnt_main_num2": "dd"
}
我尝试使用 for(i in obj) {....}
但失败了!
请帮忙!
您基本上是在询问如何使用表示嵌套路径的键来展平嵌套对象。这里有一个小的递归函数可以做到这一点:
const flatten = (o, pre) => Object.entries(o).reduce((a, [k, v]) => (
key = pre ? `${pre}_${k}`: k,
{
...a,
...Object.getPrototypeOf(v) !== Object.prototype ? {[key]: v} : flatten(v, key)
}), {});
完整片段:
const o = {
"title": "aa",
"desc": ["i", "j", "k"],
"cnt": {
"head": "bb",
"main": {
"num1": {
"time1": "mm",
"time2": "kk"
},
"num2": "dd"
}
}
};
const flatten = (o, pre) => Object.entries(o).reduce((a, [k, v]) => (
key = pre ? `${pre}_${k}`: k,
{
...a,
...Object.getPrototypeOf(v) !== Object.prototype ? {[key]: v} : flatten(v, key)
}), {});
console.log(flatten(o));
我的JSON对象数据:
{
"title": "aa",
"desc": ["i", "j", "k"],
"cnt": {
"head": "bb",
"main": {
"num1": {
"time1": "mm",
"time2": "kk"
},
"num2": "dd"
}
}
}
我的问题是:如何使用 JavaScript 将上面的 JSON 对象翻译成下面的对象?
{
"title": "aa",
"desc": ["i", "j", "k"],
"cnt_head": "bb",
"cnt_main_num1_time1": "mm",
"cnt_main_num1_time2": "kk",
"cnt_main_num2": "dd"
}
我尝试使用 for(i in obj) {....}
但失败了!
请帮忙!
您基本上是在询问如何使用表示嵌套路径的键来展平嵌套对象。这里有一个小的递归函数可以做到这一点:
const flatten = (o, pre) => Object.entries(o).reduce((a, [k, v]) => (
key = pre ? `${pre}_${k}`: k,
{
...a,
...Object.getPrototypeOf(v) !== Object.prototype ? {[key]: v} : flatten(v, key)
}), {});
完整片段:
const o = {
"title": "aa",
"desc": ["i", "j", "k"],
"cnt": {
"head": "bb",
"main": {
"num1": {
"time1": "mm",
"time2": "kk"
},
"num2": "dd"
}
}
};
const flatten = (o, pre) => Object.entries(o).reduce((a, [k, v]) => (
key = pre ? `${pre}_${k}`: k,
{
...a,
...Object.getPrototypeOf(v) !== Object.prototype ? {[key]: v} : flatten(v, key)
}), {});
console.log(flatten(o));