Javascript 如果满足条件,则从对象数组中获取对象

Javascript 如果满足条件,则从对象数组中获取对象,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个来自外部api的“非常大的对象”。我想通过用户提供的值获得objectbase的id,在本例中,category的id是一个包含两个 { "6":{ "id":2045, "categories":[ { "id":7, "name":"Day Trips & Excursions Outside the City" }, { "id":34, "name

我有一个来自外部api的“非常大的对象”。我想通过用户提供的值获得objectbase的id,在本例中,category的id是一个包含两个

 { 
  "6":{  
  "id":2045,
  "categories":[  
     {  
        "id":7,
        "name":"Day Trips & Excursions Outside the City"
     },
     {  
        "id":34,
        "name":"Day-Tour"
     },
     {  
        "id":8,
        "name":"Food, Wine & Gastronomy"
     }
   ],
  },
 "8":{  
  "id":20456,
  "categories":[  
     {  
        "id":17,
        "name":"Day Trips & Excursions Outside the City"
     },
     {  
        "id":2,
        "name":"Day-Tour"
     },
     {  
        "id":8,
        "name":"Food, Wine & Gastronomy"
     }
  ],
 },
},
在本例中,我希望获得对象的id,如果其中一个类别id与用户提供的id匹配,则示例id:2045。例如,用户提供8,它应该返回id 20145和20456,如果用户提供17,它应该返回id 20456

我试过了

   const acti = activitiesbigobjct.filter((e) => e.categories);
但我得到的错误过滤器不是一个函数错误

我试过类似的东西

    for(const [key, value] of Object.entries(activitiesbigobj)) {
          console.log(value)
     }

但我认为这不是最好的解决方案,有什么想法吗?

如果您只需要值,只需使用
对象即可。值

Object.values(activitiesbigobjct).filter((e) => e.categories.some(id => id === 8)).map(e => e.id);

您可以使用
Object.keys()
Array.forEach()

var obj={“6”:{id:2045,类别:[{id:7,名称:“城外一日游”},{id:34,名称:“一日游”},{id:8,名称:“食品、葡萄酒和美食”},{id:20456,类别:[{id:17,名称:“城外一日游”},{id:2,名称:“一日游”},{id:8,名称:“食品、葡萄酒和美食”}] }};
var userId=8;
var结果=[];
Object.keys(obj.forEach)((key)=>{
obj[key].categories.forEach((category)=>{
if(category.id==userId)
result.push(obj[key].id);
});
});

控制台日志(结果)
您可以过滤对象的值并映射
id

函数getId(subId){
返回对象
.价值(数据)
.filter(({categories})=>categories.some({id})=>id==subId))
.map(({id})=>id)
}
var数据={“6”:{id:2045,类别:[{id:7,名称:“城外一日游”},{id:34,名称:“一日游”},{id:8,名称:“食品、葡萄酒和美食”},},“8”:{id:20456,类别:[{id:17,名称:“城外一日游”},{id:2,名称:“一日游”},{id:8,名称:“食品、葡萄酒和美食”};;

console.log(getId(8))发生第一个错误是因为
.filter()
是数组上的一个函数,而您的大对象就是它,一个对象

您可以将大对象放入数组中,然后使用
.filter().map()
首先进行筛选,然后获取所需的值

一个简单的例子:

[{ id: 1, name: "a"},{ id: 2, name: "b" }].filter(x => x.id === 2).map(x => x.name) 
它将从过滤结果中返回
“b”
属性
name

如果子
category
匹配,您需要使用稍微不同的方式来执行操作,因为您需要父对象的
id
,例如:

[<your data>].filter(x => x.categories.id === <your id (17)>).map(x => x.id)
[].filter(x=>x.categories.id==).map(x=>x.id)