我有很多任务,我需要根据我单击的任务找到所有子项。我想要一个位置数组 [1,2,3] 返回,以便我可以处理这些行。
这是一个示例。
var taskAR = [
{
"isParent": true,
"parentID": null,
"level": 0
},
{
"isParent": true,
"parentID": 0,
"level": 1
},
{
"isParent": true,
"parentID": 1,
"level": 2
},
{
"isParent": false,
"parentID": 2,
"level": 3
},
{
"isParent": false,
"parentID": 2,
"level": 3
},
{
"isParent": false,
"parentID": null,
"level": 0
},
{
"isParent": true,
"parentID": null,
"level": 0
},
{
"isParent": false,
"parentID": 7,
"level": 1
}
];
function getNestedChildren(arr, parentID) {
var out = []
for (var x = 0, len = arr.length; x < len ; x++) {
var d = arr[x];
if (d.parentID == parentID) {
var children = getNestedChildren(arr, x);
if (children.length) {
d.parentID = x;
}
out.push(x)
}
}
return out
}
getNestedChildren(this.master.tasks, parentID)
感谢您的帮助
最佳答案
此代码有两个问题:首先是您没有累积值。您需要将 getNestedChildren
嵌套调用的输出返回到 out
数组中。其次,我不知道为什么在运行时要更改任何 parentID
,它应该是只读操作。
取出来
if (children.length) {
d.parentID = x;
}
并将其替换为
out = out.concat(children);
关于javascript递归按数组位置查找子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28632649/