【发布时间】:2021-06-29 14:15:30
【问题描述】:
我有以下递归函数:
const findChildren = (id, array) => {
const matchingItems = array.filter(arrayItem => {
if (arrayItem.children) {
findChildren(id, arrayItem.children)
}
return arrayItem.item.parent === id;
})
return matchingItems;
}
我试图只查找具有相同parent 属性的元素,该属性等于我作为参数传入函数的id。这是我正在使用的对象数组:
const data = [
{
"item": {
"id": 0,
"name": "aaa"
},
"children": [
{
"item": {
"id": 1,
"name": "bbb",
"parent": 0
}
},
{
"item": {
"id": 2,
"name": "ccc",
"parent": 0
}
}
]
},
{
"item": {
"id": 3,
"name": "ddd"
},
"children": [
{
"item": {
"id": 4,
"name": "eee",
"parent": 3
}
},
{
"item": {
"id": 5,
"name": "fff",
"parent": 3
},
"children": [
{
"item": {
"id": 6,
"name": "ggg",
"parent": 5
}
}
]
}
]
},
{
"item": {
"id": 7,
"name": "hhh"
},
"children": [
{
"item": {
"id": 8,
"name": "iii",
"parent": 7
},
"children": [
{
"item": {
"id": 9,
"name": "jjj",
"parent": 8
},
"children": [
{
"item": {
"id": 10,
"name": "kkk",
"parent": 9
}
},
{
"item": {
"id": 11,
"name": "lll",
"parent": 9
}
},
{
"item": {
"id": 12,
"name": "mmm",
"parent": 9
}
}
]
},
{
"item": {
"id": 13,
"name": "nnn",
"parent": 8
},
"children": [
{
"item": {
"id": 14,
"name": "ooo",
"parent": 13
}
},
{
"item": {
"id": 15,
"name": "ppp",
"parent": 13
}
},
{
"item": {
"id": 16,
"name": "qqq",
"parent": 13
}
}
]
}
]
}
]
},
{
"item": {
"id": 17,
"name": "rrr"
},
"children": [
{
"item": {
"id": 18,
"name": "sss",
"parent": 17
}
},
{
"item": {
"id": 19,
"name": "ttt",
"parent": 17
},
"children": [
{
"item": {
"id": 20,
"name": "uuu",
"parent": 19
}
},
{
"item": {
"id": 21,
"name": "vvv",
"parent": 19
}
}
]
},
{
"item": {
"id": 22,
"name": "www",
"parent": 17
}
},
{
"item": {
"id": 23,
"name": "xxx",
"parent": 17
},
"children": [
{
"item": {
"id": 24,
"name": "yyy",
"parent": 23
}
},
{
"item": {
"id": 25,
"name": "zzz",
"parent": 23
}
}
]
}
]
}
]
当像这样调用函数时,我得到undefined:
console.log(findChildren(3, data));
我尝试使用map 和find,结果总是undefined。我的想法用完了,并且真的在递归中挣扎。任何帮助,将不胜感激。谢谢。
【问题讨论】:
标签: javascript arrays object recursion