如何在nodejs递归函数中返回for/in函数何时结束



我正在node.js中迭代一个嵌套的json,如下所示,并希望获取类型为abc的所有attrList,然后创建另一个json。

我能够提取所需的数据并创建输出json。

但是我应该如何返回最终的输出数组呢?我不知道退出/返回的条件。我是nodejs的新手,还在学习。这里有人能帮忙吗?

function recursion(input, output) {
if (input["Type"] == "abc") {
let attrlist = {};
for (let i = 0; i < input["atrrlist"].length; i++) {
attrlist[input["atrrlist"][i]["name"]] = input["atrrlist"][i]["val"];
}
if (input["atrrlist"].length > 0) {
output[input["a"]] = attrlist;
}
}
for (let obj in input) {
if (typeof input[obj] == "object" && input[obj] !== null) {
recursion(input[obj], output);
}
}
}

我称之为。

let output={};
recursion(input, output)

输入json如下:

{
"a": "val",
"b": "val2",
"Type": "abc",
atrrlist": [{
"name": "vbv",
"val": "vbv"
}],
"child": [{
"a": "val",
"b2": "val2",
"Type": "abc",
"atrrlist": [{
"name": "vbv",
"val": "vbv"
}],
"child": [{
"a": "val",
"b2": "val2",
"Type": "abc",
"atrrlist": [{
"name": "vbv",
"val": "vbv"
}],
"child": [{
"a": "val",
"b2": "val2",
"Type": "xyz",
"atrrlist": [{
"name": "vbv",
"val": "vbv"
}]
}]
}]
}]
}

您没有指定所需的输出结构,只是它是一个数组。

我建议不要将output作为参数传递,而是将其作为recursion函数的返回值。代码中的主要问题是没有将递归结果连接到"当前"结果。您唯一一次定义output时,它不是一个数组,而您写"我应该如何返回最终输出数组?">。因此,将它定义为一个数组,并将结果推送到它,也就是递归结果。

function recursion(input) {
const output = [];
if (input.Type === "abc") {
const attrlist = {};
for (const {name, val} of input.atrrlist) {
attrlist[name] = val;
}
if (input.atrrlist.length > 0) {
output.push({ [input.a]: attrlist });
}
}
for (const obj of Object.values(input)) {
if (Object(obj) === obj) {
output.push(...recursion(obj));
}
}
return output;
}
// Sample input:
const input = {"a": "val","b": "val2","Type": "abc","atrrlist": [{"name": "category","val": "furniture"}],"child": [{"a": "val","b2": "val2","Type": "abc","atrrlist": [{"name": "product","val": "chair"}],"child": [{"a": "val","b2": "val2","Type": "abc","atrrlist": [{"name": "color","val": "blue"}],"child": [{"a": "val","b2": "val2","Type": "xyz","atrrlist": [{"name": "vbv","val": "vbv"}]}]}]}]};
console.log(recursion(input));

最新更新