gpt4 book ai didi

javascript - 使用搜索词过滤树结构 json 的 Javascript 函数。排除与搜索词不匹配的任何对象

转载 作者:行者123 更新时间:2023-12-05 03:51:52 24 4
gpt4 key购买 nike

我有一个具有以下结构的 json,它可以达到 n 级深度:

[{
name: 'p1',
child:[{
name: 'c1',
child: [{
name: 'gc1',
child: []
},{
name: 'gc2',
child:[]
}]
},{
name: 'c2',
child: [{
name: 'gc1',
child: []
},{
name: 'gc2',
child:[]
}]
},{
name: 'c3',
child: [{
name: 'gc1',
child: []
},{
name: 'gc2',
child:[]
}]
}]},{
name: 'p2',
child:[{
name: 'c1',
child: [{
name: 'gc1',
child: []
},{
name: 'gc2',
child:[]
}]
},{
name: 'c2',
child: [{
name: 'gc1',
child: []
},{
name: 'gc2',
child:[]
}]
}]}]

情况1:如果搜索词是c1,输出是

[{
name: 'p1',
child:[{
name: 'c1',
child: []
}]
},{
name: 'p2',
child:[{
name: 'c1',
child: []
}]
}]

情况2:如果用户搜索c3,输出为

[{
name: 'p1',
child:[{
name: 'c3',
child: []
}]
}]

情况3:如果用户搜索p1,输出为

[{
name: 'p1',
child:[]
}]

情况4如果用户搜索gc1,输出为

[{name: 'p1',child:[{
name: 'c1',
child: [{
name: 'gc1',
child: []
}]},{
name: 'c2',
child: [{
name: 'gc1',
child: []
}]},{
name: 'c3',
child: [{
name: 'gc1',
child: []
}]}]},{name: 'p2', child:[{
name: 'c1',
child: [{
name: 'gc1',
child: []
}]},{
name: 'c2',
child: [{
name: 'gc1',
child: []
}]}]}]

请注意,如果 child 的名字不匹配,则它不会包含在输出中。

我正在使用以下逻辑,但它不会过滤节点“n”级别:

function filterTree(data, matcher) {
data.child= data.child.filter(row => row.name === matcher);
for (nodeIndex in data.child)
filterTree(data.child[nodeIndex], matcher);

}

我需要一个最佳的方式来执行过滤

最佳答案

您可以减少数组并查找想要的名称或查找 child 数组,如果找到对象,则将实际对象添加到新的子数组中。

function search(array, name) {
const s = (r, { child, ...object }) => {
if (object.name === name) {
r.push({ object, child: [] });
return r;
}
child = child.reduce(s, []);
if (child.length) r.push({ ...object, child });
return r;
};
return array.reduce(s, []);
}

var data = [{ name: 'p1', child: [{ name: 'c1', child: [{ name: 'gc1', child: [] }, { name: 'gc2', child: [] }] }, { name: 'c2', child: [{ name: 'gc1', child: [] }, { name: 'gc2', child: [] }] }, { name: 'c3', child: [{ name: 'gc1', child: [] }, { name: 'gc2', child: [] }] }] }, { name: 'p2', child: [{ name: 'c1', child: [{ name: 'gc1', child: [] }, { name: 'gc2', child: [] }] }, { name: 'c2', child: [{ name: 'gc1', child: [] }, { name: 'gc2', child: [] }] }] }];

console.log(search(data, 'c1'));
console.log(search(data, 'c3'));
console.log(search(data, 'p1'));
console.log(search(data, 'gc1'));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 使用搜索词过滤树结构 json 的 Javascript 函数。排除与搜索词不匹配的任何对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62611107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com