【发布时间】:2016-02-08 22:05:19
【问题描述】:
我有一个 JSON 配置文件如下:
var conf = [
{
"value": "baz",
"threshold": 20,
"other": 123
},
{
"value": "mo",
"other": 456,
"child": {
"value": "foo",
"other": 789,
"child": {
"value": "larry",
"other": 123
}
}
}
];
如果它们有子对象,我需要提取每个对象并将它们按顺序保存在一起。例如,对象 1 (baz) 是独立的。对象 2 (mo) 将有两个子对象。这 3 个作为一组必须一起提取。
子对象的数量没有限制。
我试图使用一个数组来持久化每个对象以保持顺序。所以所需的输出看起来像:
[[{"value":"baz","threshold":20,"other":123}],
[[{"value":"mo","other":456,"child":{"value":"foo","other":789,"child":{"value":"larry","other":123}}}],
[{"value":"foo","other":789,"child":{"value":"larry","other":123}}],
[{"value":"larry","other":123}]]]
最后一个要求是实际从父母中删除子值,以便输出实际上可以像:
[
[{"value":"baz","threshold":20,"other":123}],
[
[{"value":"mo","other":456}],
[{"value":"foo","other":789}],
[{"value":"larry","other":123}]
]
]
我已经为此挂了几个小时,进展甚微。我知道我需要创建一个递归函数,将每个节点推入一个数组,然后检查子对象并重复。
这是我目前所拥有的。我的想法是,如果我可以获取每个任务被推送到的数组 id(使用循环 id),也许我可以在再次调用函数时映射它。
感谢任何指导。
var execSets = []; 函数解析器(任务){
// an ordered array of task execution
for (let eachTask in tasks) {
var taskSet = [];
console.log("====================================");
console.log(tasks[eachTask]);
if(!tasks[eachTask].child && typeof(tasks[eachTask]) === 'object'){
console.log(tasks[eachTask]);
taskSet.push(tasks[eachTask]);
execSets.push(taskSet);
}
if(tasks[eachTask].child){
let childAlias = tasks[eachTask].child;
delete tasks[eachTask].child;
taskSet.push(tasks[eachTask]);
execSets.push(taskSet);
parser(childAlias);
}
}
}
【问题讨论】:
标签: arrays json node.js recursion flatten