Слишком поздно, вот еще одна рекурсивная находка:
var array = [
{
id: 1,
value: 'value',
children: null,
},
{
id: 2,
value: 'my value',
children: [
{
id: 'child1',
value: 'my value',
children: null,
},
{
id: 'child2',
value: 'value',
children: null,
},
{
id: 'child3',
value: 'value',
children: [
{
id: 'childchild1',
value: 'my value',
children: null,
},
],
},
],
},
{
id: 3,
value: 'value',
children: null,
},
{
id: 4,
value: 'my value',
},
];
function find(search, arr) {
function recur(result, search, arr) {
if (!(arr && arr.length)) {
return result;
}
return result
.concat(
...arr.filter((item) =>
item.value.includes(search),
),
)
.concat(
...arr.map((item) =>
recur([], search, item.children),
),
);
}
return recur([], search, arr);
}
console.log(find('my', array));