Javascript 这个JS forEach函数能变得更简单或更优雅吗?

Javascript 这个JS forEach函数能变得更简单或更优雅吗?,javascript,arrays,loops,multidimensional-array,foreach,Javascript,Arrays,Loops,Multidimensional Array,Foreach,我试图在JS多维数组中搜索key:value对。我编写的代码似乎工作得很好,但我想知道是否有一种更优雅的方法可以使用ES6技术来编写它。 该数组基本上是一个文件数组,我正试图通过循环找到某个键:值对 所以多维数组是这样的: 下面是json数组的屏幕截图 这是代码: const search = (key, val, arr, result) => { arr.forEach(folderItem => { if(folderItem[key] === val) {

我试图在JS多维数组中搜索key:value对。我编写的代码似乎工作得很好,但我想知道是否有一种更优雅的方法可以使用ES6技术来编写它。 该数组基本上是一个文件数组,我正试图通过循环找到某个键:值对

所以多维数组是这样的:

下面是json数组的屏幕截图

这是代码:

const search = (key, val, arr, result) => {
  arr.forEach(folderItem => {
    if(folderItem[key] === val) {
      result.push(folderItem);
    } 
    if(folderItem.files && folderItem.files.length) search(key, val, folderItem.files, result);
  });
  return result;
}
let result = search('name', 'Folder2', [files], []);
这里还有一个例子 您也可以获取并添加嵌套的已找到项,而无需为
结果使用另一个参数

const
文件={name:“files”,is_dir:1,url:“test”,文件:[{name:“folder1”,is_dir:1,url:“test\\\/folder1”,is_dir:1,url:“test\\\/folder1\\\/folder1_1”,文件:[{name:“index.txt”,is_dir:0,url:“test\\\\\/folder1\\\\\/folder1\\\/index.txt”},{name:“folder1\\\\/folder1\\/folder1\\/index.txt”},文件:[{name:“index.txt”,is_dir:0,url:“test\\/folder1\\\/folder1\\/index.txt”},{name:“index.txt”,is_dir:0,url:“test\\/folder1\\\/index.txt”},{name:“folder2”,is_dir:1,url:[{name:“test\\\/folder2\\\/folder2\\\\/folder2\\/index.txt”},files:[{name:“index:0,url:“test\\/folder2\\/folder2\\\\\\\\\/index.txt”},{name:“folder2\\\/folder2\\\\/folder2\\\\\/folder2\\\\\/index.txt”},{name:“index.txt”,is\\\\\/folder2\\\\/index.txt“},{name:“folder3”,is\\\\\\\/folder3\\\\\/folder3,files:[},{name:“index.txt”,is\\\\\\/index.txt,is\\\\\\/index.txt},{,
search=(key,val,arr)=>arr.flatMap(folderItem=>[
…(folderItem[key]==val?[folderItem]:[]),
…搜索(key、val、folderItem.files | |[])
]),
结果=搜索('name','folder2',[files]);
console.log(result);
您也可以获取并添加嵌套找到的项,而无需为
结果使用另一个参数

const
文件={name:“files”,is_dir:1,url:“test”,文件:[{name:“folder1”,is_dir:1,url:“test\\\/folder1”,is_dir:1,url:“test\\\/folder1\\\/folder1_1”,文件:[{name:“index.txt”,is_dir:0,url:“test\\\\\/folder1\\\\\/folder1\\\/index.txt”},{name:“folder1\\\/folder1\\\/folder1\\/index.txt”},{,文件:[{name:“index.txt”,is_dir:0,url:“test\\/folder1\\\/folder1\\/index.txt”},{name:“index.txt”,is_dir:0,url:“test\\\/folder1\\\/index.txt”},{name:“folder2”,is_dir:1,url:[{name:“folder2\\\/folder2\\\\/folder2\\/index.txt”},files:[{name:“test name:“folder2\\\/folder2\\\/folder2”\url:0,url:“test\\/folder2\\/folder2\\\\\\\\\/index.txt”},{name:“folder2\\\/folder2\\\\/folder2\\\\\/folder2\\\\\/index.txt”},{name:“index.txt”,is\\\\\/folder2\\\\/index.txt“},{name:“folder3”,is\\\\\\\/folder3\\\\\/folder3,files:[},{name:“index.txt”,is\\\\\\/index.txt,is\\\\\\/index.txt},{,
search=(key,val,arr)=>arr.flatMap(folderItem=>[
…(folderItem[key]==val?[folderItem]:[]),
…搜索(key、val、folderItem.files | |[])
]),
结果=搜索('name','folder2',[files]);

console.log(result);
为什么示例只在外部平台上,而不在问题本身中(最好是片段)?为什么您直接修改
结果
,然后还返回它?@Andreas您能给我一些指导吗?我不确定您的意思。您将使用什么客观标准来确定答案“?为什么示例仅在外部平台上,而不在问题本身中(最好是片段)?为什么您直接修改
结果
,然后返回它?@Andreas您能指导我吗?”?我不知道你的意思。你将用什么客观标准来确定答案的“优雅”?