【发布时间】:2018-04-24 09:38:20
【问题描述】:
我是 javascript 对象和树创建的初学者,所以请多多包涵。 我有一个这样的对象数组
[
{
"l1": 1,
"l2": 2,
"l3": 3,
"l4": 4,
"l5": 5,
"l6": null
},
{
"l1": 1,
"l2": 2,
"l3": 3,
"l4": 4,
"l5": 6,
"l6": null
},
{
"l1": 1,
"l2": 2,
"l3": 7,
"l4": 8,
"l5": 9,
"l6": null
},
{
"l1": 1,
"l2": 2,
"l3": 7,
"l4": 8,
"l5": 10,
"l6": null
},
{
"l1": 1,
"l2": 2,
"l3": 3,
"l4": 11,
"l5": 12,
"l6": null
},
{
"l1": 1,
"l2": 2,
"l3": 3,
"l4": 11,
"l5": 13,
"l6": null
}
]
我已将此数据存储在 json 文件中,并且我想使用此对象数组创建一个类似树结构的对象。像这样。
{
"1": [
{
"2": [
{
"3": [
{
"4": [
{
"5": [
null
]
},
{
"6": [
null
]
}
]
},
{
"11": [
{
"12": [
null
]
},
{
"13": [
null
]
}
]
}
]
},
{
"7": [
{
"8": [
{
"9": [
null
]
},
{
"10": [
null
]
}
]
}
]
}
]
}
]
}
我正在尝试自己做这件事,但我一开始就失败了。
这是我的尝试
var fs = require('fs');
var file = 'levels.json';
var content = fs.readFileSync(file, { encoding: 'binary' });
var obj = {}
JSON.parse(content).forEach((curr, i, arr)=>{
if(curr.l1){
obj[curr.l1] = []
}
if(curr.l2){
var l2obj = {}
l2obj[curr.l2] = []
obj[curr.l1].push(l2obj)
// obj[curr.l1].push({curr.l2:[]})
}
})
fs.writeFileSync('theObject.json', JSON.stringify(obj), 'utf8');
我发现的问题是l2obj[curr.l2] = [] 行覆盖了先前的数组,我无法正确嵌套它们。obj[curr.l1] = [] 行也存在同样的问题。我也尝试了注释行,但它抛出了语法错误。我觉得它非常基本但也非常令人困惑,我如何从动态值创建对象并将它们推送到数组而不覆盖前一个数组。任何建议、提示。
第二行问题,这是表示此类数据的最佳方式吗?我想使用树形结构,因为它看起来是一种准确且最短的数据结构形式。json 数据有近 20k 个对象和级别信息。非常感谢您的建议。
【问题讨论】:
-
您能解释一下转换背后的预期逻辑吗?
-
我有一个大列表(几乎 20k 行)类别名称及其子类别名称嵌套多达 6 个级别。我假设树结构将是找到直接兄弟姐妹和父母的最佳(最短)数据结构。
标签: javascript arrays object tree