【发布时间】:2020-03-26 22:42:17
【问题描述】:
我正在尝试基于键返回值数组的 java 脚本递归函数。
嵌套的 JavaScript 对象的深度未知。该函数正在运行,但该值未正确返回..当我从另一个函数调用此递归函数时,我只获得了第一个迭代值。但我可以控制台并查看同一函数中的值。
这是我的 json
{
"id": 0,
"name": "Root Entity",
"children": [{
"id": 1,
"name": "REAT",
"children": [{
"id": 2,
"name": "Business",
"children": [{
"id": 3,
"name": "Region 1",
"children": [{
"id": 5,
"name": "Area 1",
"children": [
{
"dealerId": 14,
"name": "lead 1"
},
{
"dealerId": 15,
"name": "lead 2"
},
{
"dealerId": 16,
"name": "lead 3"
},
{
"dealerId": 17,
"name": "lead 4"
},
{
"dealerId": 18,
"name": "lead 5"
},
{
"dealerId": 19,
"name": "lead 6"
}, {
"dealerId": 20,
"name": "lead 7"
}],
"kpi_1_met": 0,
"lead_num": 0,
}, {
"id": 6,
"name": "Area 2",
"children": [{
"dealerId": 31
"name": "lead 1"
}]
}]
}]
}]
}]
}
这是我尝试过的递归函数
async function outputArray(output, leadInfo, req, res) {
let resoutput = output.children,
constructedArray = [],
obj = {};
// dealerName, entityList = await entityNames(req, res);
let leagueData = [];
resoutput.forEach((dataArray) => {
if (dataArray.hasOwnProperty('children') &&
dataArray.children instanceof Array &&
dataArray.children.length > 0) {
// console.log("================ dataArray.children", dataArray.children[0]['name']);
for (let i in dataArray.children) {
obj = { 'regionId': dataArray.children[i].id, 'region': dataArray.children[i].name};
outputArray(dataArray.children[i], leadInfo, req, res);
leagueData.push(obj);
// console.log("================ leagueData ===============", leagueData);
}
} else {
if (dataArray.hasOwnProperty('name'))
// console.log("================ else", dataArray.name);
}
});
// console.log("================ leagueData outside =============", leagueData);
return leagueData;
}
我在下面的另一个函数中调用上面的递归函数
async function dataTable(output, leadInfo, req, res) {
let obj = {},
data = await outputArray(output, leadInfo, req, res, obj);
// here First Iterated data only coming
// console.log("data from data Table", data)
}
输出应该是
[
{ regionId: 3, areaId: 5, dealerId: 14, name: 'lead 1', region: 'Region 1', area: 'Area 1' },
{ regionId: 3, areaId: 5, dealerId: 31, name: 'lead 1', region: 'Region 1', area: 'Area 2' }
]
应该根据树的层次来填充
请任何人帮助我。我正在努力把它弄出来。
【问题讨论】:
-
你想要怎样的输出数组?是不是像 { id: 0, name: 'Root Entity' }
-
不应该是 [{ id: 0, name: 'Root Entity' }, { id: 1, name: 'REAT' } ]
-
我发布了答案检查一次。
-
我不知道如何将您想要为各个级别生成
areaId、regionId和dealer等字段名称的概念与“嵌套的 JavaScript物体的深度未知。”鉴于“区域”、“经销商”等不在数据中,您如何协调这两者? -
@ScottSauyet 每个对象都有 id..您可以在区域上方和区域上方看到 id ..每个对象都有名称 例如)“名称”:“区域 1”在区域 1 中它有区域 1 ,区域 2。和区域 2 它有区域 1 区域 2 等等...它就像基于层次结构展平数组 如果区域为 1 并且区域是什么,名称在区域 1 它应该属于区域 1
标签: javascript arrays node.js json recursion