从对象javascript的嵌套数组中查找条目

从对象javascript的嵌套数组中查找条目,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,当使用输入类型id(,它是唯一的)时,我需要返回带有category和type的字符串,我已经基本完成了,但是我无法获取根category。 我的解决方案返回“Terrace”,但我需要“Rural/Terrace” 我觉得我把事情弄得太复杂了 let obj=[ { 类别:"住宅",, 类别识别号:1, 类型:[{name:'House',id:1},{name:'Townhouse/Villa',id:3},{name:'House and Land',id:5},{name:'Duple

当使用输入类型id(,它是唯一的)时,我需要返回带有category和type的字符串,我已经基本完成了,但是我无法获取根category。 我的解决方案返回“Terrace”,但我需要“Rural/Terrace”

我觉得我把事情弄得太复杂了

let obj=[
{
类别:"住宅",,
类别识别号:1,
类型:[{name:'House',id:1},{name:'Townhouse/Villa',id:3},{name:'House and Land',id:5},{name:'Duplex',id:4},{name:'Land',id:6},{name:'Terrace',id:16},{name:'公寓/单元',id:2},{name:'relocateable',id:7}]
},
{
类别:"商业",,
类别识别号:2,
类型:[{name:'Office',id:12},{name:'House',id:8},{name:'Land',id:9},{name:'Shop',id:10},{name:'Factory',id:11}]
},
{
类别:"乡郊",,
类别识别号:3,
类型:[{name:'House',id:17},{name:'House and Land',id:14},{name:'Land',id:13},{name:'Terrace',id:15}]
}
];

console.log(对象映射(o=>o.types).reduce((acc,val)=>acc.concat(val),[]).find(内部对象=>内部对象id==15).name)我可以试试这样的东西。使用
reduce()
浏览主要项目,然后使用
find()
查看是否有匹配的项目。如果是,请将所需内容推送到阵列中

let obj=[{category:'住宅',category:'住宅',id:1},{name:'联排别墅',id:3},{name:'住宅和土地',id:5},{name:'复式',id:4},{name:'土地',id:6},{name:'露台',id:16},{name:'公寓/单元',id:2},{name:'可搬迁',id:7},{categegegory:'商业',分类,id:2,类型:[{name:'Office',id:12},{name:'House',id:8},{name:'Land',id:9},{name:'Shop',id:10},{name:'Factory',id:11}]},{category:'Rural',category_id:3,type:[{name:'House',id:17},{name:'House and Land id:14},{name:'Land id:13},{name:'Terrace',id:15}];
let found=obj.reduce((a,c)=>{
let found=c.types.find(t=>t.id==15)
if(find)a.push({category:c.category,name:find.name})
归还
}, [])

console.log(找到)
为什么不做这样简单的事情呢

let obj=[{category:'Residential',category:'u id:1,type:[{name:'House',id:1},{name:'Townhouse/Villa',id:3},{name:'House and Land',id:5},{name:'Duplex',id:4},{name:'Land id:6},{name:'Terrace',id:16},{name:'Unit id:2},{name:'relocable',id:7},{类别:'Commercial',类别{u id:2,类型:[{名称:'Office',id:12},{名称:'House',id:8},{名称:'Land',id:9},{名称:'Shop',id:10},{名称:'Factory',id:11},{类别:'Rural类别{类型:[{名称:'House',id:17},{名称:'House and Land id:14},{名称:'Land id:13},{名称:'Terrace',id:15}] } ];
对于(让obj的元素){
consttypefound=elem.types.find(type=>type.id==15);
if(typefind){
console.log(elem.category+“”+typeFound.name);
打破
}

}
这里有一种方法。首先,将可能的结果展平为一个结果数组,如
[{id:15,name:“Rural/Terrace”},…]
,然后找到所需的特定元素

let obj=[
{
类别:"住宅",,
类别识别号:1,
类型:[{name:'House',id:1},{name:'Townhouse/Villa',id:3},{name:'House and Land',id:5},{name:'Duplex',id:4},{name:'Land',id:6},{name:'Terrace',id:16},{name:'公寓/单元',id:2},{name:'relocateable',id:7}]
},
{
类别:"商业",,
类别识别号:2,
类型:[{name:'Office',id:12},{name:'House',id:8},{name:'Land',id:9},{name:'Shop',id:10},{name:'Factory',id:11}]
},
{
类别:"乡郊",,
类别识别号:3,
类型:[{name:'House',id:17},{name:'House and Land',id:14},{name:'Land',id:13},{name:'Terrace',id:15}]
}
];
常量flatTypes=对象映射(cat=>
cat.types.map(类型=>{
返回{
id:type.id,
名称:`${cat.category}/${type.name}`
};
})
).reduce((flatTypes,typeArray)=>
flatTypes.concat(类型数组)
, []);
const result=flatTypes.find(type=>type.id==15).name;

console.log(result);
谢谢,有时候一行程序真的很难看:)