如何基于数组动态创建含同键不同值的嵌套JavaScript对象
解决动态嵌套JavaScript对象的问题
我看了你的代码和目标结果,问题根源很明确:你把current指向了data[i]这个数组,然后给数组添加name属性,但JSON序列化数组时只会保留索引对应的元素,自定义属性会被直接忽略,所以最后输出时只有第一个数组的内容,后续的嵌套结构全部丢失了。
你的目标结构里,每个name数组内部的对象才包含下一层的name数组,而不是数组本身拥有name属性。所以我们需要调整current的指向,让它每次指向数组里的对象,而非数组本身。
修改后的代码如下:
var data = [[{desc:"A", age:26}], [{desc:"B", age:12}], [{desc:"C", age:48}]] const keyName = "name" var json = {}; var current = json; for (var i = 0; i < data.length; i++) { // 给当前层级设置name属性,值为对应的数据数组 current[keyName] = data[i]; // 如果不是最后一项,将current切换为当前数组里的第一个对象,准备下一层嵌套 if (i !== data.length - 1) { current = data[i][0]; } } console.log(JSON.stringify(json));
运行这段代码后,就能得到你想要的目标对象:
{"name":[{"desc":"A","age":26,"name":[{"desc":"B","age":12,"name":[{"desc":"C","age":48}]}]}]}
简单梳理下逻辑:
- 初始时
current指向根对象json,先给它添加name属性,值为data[0] - 由于不是最后一项,把
current切换为data[0]数组里的第一个对象,这样下一次循环时,给这个对象添加name属性,值为data[1] - 重复这个过程,直到最后一项,不需要再切换
current,也就不会给最后一个对象添加额外的name属性
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

