javascript 递归以按数组位置查找 children
javascript recursion to find children by array position
我有一堆任务,我需要根据我点击的任务找到所有 children。我想要一组位置 [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)
感谢帮助
此代码有两个问题:首先是您没有累积值。您需要在 out
数组中返回对 getNestedChildren
的嵌套调用的输出。其次,我不知道你为什么在运行时更改任何 parentID
s,它应该是一个只读操作。
外卖
if (children.length) {
d.parentID = x;
}
并将其替换为
out = out.concat(children);
我有一堆任务,我需要根据我点击的任务找到所有 children。我想要一组位置 [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)
感谢帮助
此代码有两个问题:首先是您没有累积值。您需要在 out
数组中返回对 getNestedChildren
的嵌套调用的输出。其次,我不知道你为什么在运行时更改任何 parentID
s,它应该是一个只读操作。
外卖
if (children.length) {
d.parentID = x;
}
并将其替换为
out = out.concat(children);