我正在使用一个分层数据集,遍历各个级别的儿童并根据某些条件对其进行转换。一旦完成转换,我需要将转换后的元素存储在对象数组中以供以后使用。
以下是我尝试过的示例。但它无法推动
else {if (d.req === "y")
块内发生的转变。
const data = [
{
name: "f1",req: "n",val: 0,
children: [
{ name: "l1", req: "n", val: 1 },
{ name: "s1", req: "y", val: 2 },
{ name: "q1", req: "y", val: 3,
children: [{ name: "i1" }, { name: "l1" }]
}
]
},
{ name: "d1", req: "n", val: 4, children: [{ name: "s1" }] }
];
function traverse(data) {
let container = [];
data.forEach((d, i) => {
if (d.req === "n") {
//some external function
//I want to push the result of external function to a container
// for example
container.push({ name: d.name, val: d.val * 100 });
if (d.children) {
traverse(d.children);
d.children.forEach((d) => {
if (d.req === "n") {
container.push({ name: d.name, val: d.val * 100 });
}
});
}
} else {
if (d.req === "y") {
//some external function
//I want to push the result of external function to a container
// for example
container.push({ name: d.name, val: d.val * -100 });
if (d.children) {
traverse(d.children);
d.children.forEach((d) => {
if (d.req === "y") {
container.push({ name: d.name, val: d.val * -100 });
}
});
}
}
}
});
return container;
}
console.log( traverse(data));
期望的最终结果如下。我不明白这里出了什么问题。
[{
"name": "f1",
"val": 0
},
{
"name": "l1",
"val": 100
},
{
"name": "d1",
"val": 400
},
{
"name": "s1",
"val": -200
},
{
"name": "q1",
"val": -300
}
]
您可以推送递归调用的结果。
const
data = [{ name: "f1", req: "n", val: 0, children: [{ name: "l1", req: "n", val: 1 }, { name: "s1", req: "y", val: 2 }, { name: "q1", req: "y", val: 3, children: [{ name: "i1" }, { name: "l1" }] }] }, { name: "d1", req: "n", val: 4, children: [{ name: "s1" }] }];
function traverse(data) {
let container = [];
data.forEach((d, i) => {
if (d.req === "n") {
//some external function
//I want to push the result of external function to a container
// for example
container.push({ name: d.name, val: d.val * 100 });
container.push(...traverse(d.children || []));
} else {
if (d.req === "y") {
//some external function
//I want to push the result of external function to a container
// for example
container.push({ name: d.name, val: d.val * -100 });
container.push(...traverse(d.children || []));
}
}
});
return container;
}
console.log(traverse(data));