Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从对象数组中的对象数组中搜索值?_Javascript_Arrays_Nested - Fatal编程技术网

Javascript 如何从对象数组中的对象数组中搜索值?

Javascript 如何从对象数组中的对象数组中搜索值?,javascript,arrays,nested,Javascript,Arrays,Nested,我有一个对象数组,其中每个对象都有一个对象的内部数组,而对象的内部数组又有一个对象的内部数组,它可以进入我想要过滤和显示的任何级别的内部对象 obj = [{ name: "apple", subGroups: [{ name: "apple-a", subGroups: { name: "apple-b", subGroups: [{ name: "apple-c", subGroups: { name: &q

我有一个对象数组,其中每个对象都有一个对象的内部数组,而对象的内部数组又有一个对象的内部数组,它可以进入我想要过滤和显示的任何级别的内部对象

obj = [{ name: "apple", subGroups:  [{ name: "apple-a", subGroups: { name: "apple-b", subGroups:  [{ name: "apple-c", subGroups: { name: "apple-d", subGroups:[]}}]}}]}
{ name: "orange", subGroups: [{ name: "orange-a", subGroups: { name: "orange-b", subGroups:  [{ name: "orange-c", subGroups: { name: "orange-d", subGroups:[]}}]}}]}
{ name: "mango", subGroups:  [{ name: "123", subGroups: []}]}
{ name: "grapes", subGroups:  [{ name: "123", subGroups: []}]}
{ name: "pear", subGroups:  [{ name: "123", subGroups: []}]}]
searchvalue是动态的“orange-d”

searchvalue = 'orange-d';
result = { name: "orange-d", subGroups:[]}

 const newArr = obj.map(obj => {
      return obj.name === searchvalue;
    }).flat();

我已经尝试过使用filter、map、flat,但是我找不到输出,请帮助

旁注:如果您重新考虑递归结构,可能会更好。 对于解决方案,您应该使用如下某种递归:

var obj=[
{名称:“苹果”,分组:[
{名称:“苹果a”,分组:[
{名称:“苹果-b”,分组:[
{名称:“苹果c”,分组:[
{名称:“苹果-d”,分组:[]}
]}
]}
]}
]},
{名称:“橙色”,分组:[
{名称:“橙色-a”,分组:[
{名称:“orange-b”,分组:[
{名称:“orange-c”,分组:[
{名称:“orange-d”,分组:[]}
]}
]}
]}
]},
{名称:“芒果”,分组:[
{名称:“123”,分组:[]}
]},
{名称:“葡萄”,分组:[
{名称:“123”,分组:[]}
]},
{名称:“pear”,分组:[
{名称:“123”,分组:[]}
]}
];
var searchvalue='orange-d';
函数findName(数组,名称){
让结果={};
if(!(Array.isArray(Array)和&Array.length))
返回结果;
for(数组的let项){
如果(item.name==name)返回项目;
结果=findName(item.subGroups,name);
if(result&&result.name==name)返回结果;
}
返回结果;
}
log(findName(obj,searchvalue))
您可以在前面检查移交的数组或对象,就像后面的
子组一样

const
查找=(数组,名称)=>(array.isArray(数组)?数组:[array])
.flatMap(o=>o.name==name?o:find(o.subGroups,name)),
数据=[{name:“apple”,分组:[{name:“apple-a”,分组:{name:“apple-b”,分组:[{name:“apple-c”,分组:{name:“apple-d”,分组:[]}}}}},{name:“orange-a”,分组:[{name:“orange-b”,分组:[{name:“orange c”,分组:{name:“orange d”,分组:[]}}},{name:“mango”,子组:[{name:“123”,子组:[]},{name:“grapes”,子组:[{name:“123”,子组:[]},{name:“pear”,子组:[{name:“123”,子组:[]}],
结果=查找(数据“orange-d”);

console.log(result);
请添加所需的结果。为什么
子组是数组或对象?是否只需要一个对象作为结果?