问题描述,树型数据,现在要做查询,当子节点满足条件时,返回其父节点直到其跟节点,同时也要把当前,子节点的所有孩子节点返回,最终返回的结构还是一颗树。
代码如下:
var productList = [{ name: 1, c: [{ name: 11, c: [] }, { name: 12, c: [{ name: 121, c: [] }] }] }, { name: 2, c: [{ name: 21, c: [{ name: 211, c: [{ name: 12, c: [] }] }] }] }];
var productFilter = function(list, name){
const listLength = list.length;
for (let index = 0; index < listLength; index++){
/**父级满足条件,子级全保留 */
if (list[index].name === name){
continue;
}
if (list[index].c.length){
productFilter(list[index].c, name);
}
list[index].c = list[index].c.filter(item => {
/**自己符合条件或者子级符合条件 */
if (item.name === name || item.has){
return item;
}
});
/**发现子级有满足条件的,给父级添加标识,再次循环时保留父级 has:为标识字段*/
list[index].c.length && (list[index].has = true);
}
}
productFilter(productList, 12);
console.log('栏目过滤', productList);