我正在尝试基于搜索字符串筛选一个嵌套的结构体。
如果一个项目中有匹配的搜索字符串,那么我希望保留该项目以及其父级在该结构体中。
如果未找到搜索字符串,并且该项目没有子项,则可以将其排除。
我已经编写了一些代码,使用递归数组过滤器来检查每个项目的子项。
如果一个项目中有匹配的搜索字符串,那么我希望保留该项目以及其父级在该结构体中。
如果未找到搜索字符串,并且该项目没有子项,则可以将其排除。
我已经编写了一些代码,使用递归数组过滤器来检查每个项目的子项。
const data = {
id: '0.1',
children: [
{
children: [],
id: '1.1'
},
{
id: '1.2',
children: [
{
children: [],
id: '2.1'
},
{
id: '2.2',
children: [
{
id: '3.1',
children: []
},
{
id: '3.2',
children: []
},
{
id: '3.3',
children: []
}
]
},
{
children: [],
id: '2.3'
}
]
}
]
};
const searchString = '3.3';
const filterChildren = (item) => {
if (item.children.length) {
item.children = item.children.filter(filterChildren);
return item.children.length;
}
return item.id.includes(searchString);
};
data.children = data.children.filter(filterChildren);
console.log(data);
/*This outputs:
{
"id": "0.1",
"children": [
{
"id": "1.2",
"children": [
{
"id": "2.2",
"children": [
{
"id": "3.3",
"children": []
}
]
}
]
}
]
}*/
我担心如果我的数据结构变得非常庞大,这种方法就不太有效。
有没有一种更好的方式实现这个功能,能够限制循环次数?我在想可能可以使用reducer/transducer或类似令人兴奋的东西 :)