我正在尝试使用ES6过滤器方法搜索/过滤多维数组,该多维数组的维数(因为它代表文件树)的name
值会有所不同,但还努力返回嵌套对象。 / p>
数组是什么样的:
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
,但它还应包括所有与搜索字符串匹配的嵌套对象。
如果有一种管理方法,是否还可以维护阵列结构?还是我需要先将其展平?
答案 0 :(得分:2)
首先,将数组弄平以获取名称列表:
function flatten(names, arr) {
arr.forEach((item) => {
names.push(item.name);
if (item.children) {
flatten(names, item.children);
}
});
return names;
}
var results = [];
flatten(results, fileHierarchy);
// 'results' has all the names now
使用results
数组进行过滤。