js对象展平:深循环Json对象,然后展平对象? [复制]
Posted
技术标签:
【中文标题】js对象展平:深循环Json对象,然后展平对象? [复制]【英文标题】:js object flatten:Deep loop Json objects, then flatten the objects? [duplicate] 【发布时间】:2019-05-25 23:12:07 【问题描述】:我的 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) ....
,但失败了!
请帮忙!
【问题讨论】:
发布的问题似乎根本没有包含any attempt 来解决问题。 *** 期待您 try to solve your own problem first,因为您的尝试有助于我们更好地了解您想要什么。请编辑问题以显示您尝试过的内容,以说明您遇到minimal reproducible example 的特定障碍。欲了解更多信息,请参阅How to Ask 并拨打tour。 如果您曾尝试使用for(i in obj) ....
,提出此问题的更好方法是显示这些尝试、失败的原因,并寻求具体帮助。
【参考方案1】:
您基本上是在询问如何使用表示嵌套路径的键来展平嵌套对象。这里有一个小递归函数可以做到这一点:
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)
), );
完整的sn-p:
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));
【讨论】:
解决了我的问题,非常感谢!希望这也可以帮助其他一些人。以上是关于js对象展平:深循环Json对象,然后展平对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章