const findList = (data, value) => {
let result = [];
for (let i in data) {
let now = JSON.parse(JSON.stringify(data[i]));
// 判断自己是否符合条件,
if (now.name.indexOf(value) >= 0) result.push(now);
delete now.children;
if (data[i]['children']) {
// 递归查询子
let recursion = findList(data[i]['children'], value);
if (recursion.length > 0) {
// 如果子代有符合条件的,就把子挂到父亲的 children字段上
now.children = recursion;
let f = result.find(item => item.uuid === now.uuid);
if (!f) result.push(now);
}
}
}
return result;
}
let data = [
{
name: '1',
uuid: '1',
children: [
{
name: '2',
uuid: '2',
children: [
{
name: '3',
uuid: '3',
children: [
{
name: '9',
uuid: '9'
}
]
},
{
name: '4',
uuid: '4'
}
]
}
]
},
{
name: 'a',
uuid: 'a',
children: [
{
name: 'b',
uuid: 'b',
children: [
{
name: 'z',
uuid: 'z'
}
]
},
{
name: 'b1',
uuid: 'b1',
children: [
{
name: 'b3',
uuid: 'b3'
}
]
}
]
}
]
let r = findList(data, '9')
console.log(r)