Я пытаюсь найти / отфильтровать многомерный массив, который варьируется по количеству измерений (поскольку он представляет дерево файлов) по его значению name
с помощью метода фильтра ES6, но изо всех сил пытается вернуть вложенные объекты.
Как выглядит массив:
const fileHierarchy = [
{
name: 'folder1',
children: [
{ name: 'file1.txt' },
{ name: 'file2.txt' },
{
name: 'child folder1',
children: [
{
name: 'child folder2',
children: [
{ name: 'file3.txt' },
{ name: 'file4.txt' }
]
},
{ name: 'file5.txt' },
{ name: 'file6.txt' },
{
name: 'child folder3',
children: [
{ name: 'file7.txt' },
{ name: 'file8.txt' }
]
}
]
}
]
},
{name: 'folder2'}
]
Это то, что я уже пробовал (и как выглядит мой массив / объект):
let currentFileHierarchy;
let searchString = 'file5';
currentFileHierarchy = fileHierarchy.filter(function (item) {
return item.name.toLowerCase().indexOf(searchString.toLowerCase()) >= 0
});
Результат currentFileHierarchy
является только одномерным (только folder1
и folder2
доступны для поиска), но он также должен включать все вложенные объекты, соответствующие строке поиска.
Если есть способ управления, можно ли также поддерживать структуру массива? Или мне сначала нужно его сплющить?