Javascript 如果满足条件,则从对象数组中获取对象
我有一个来自外部api的“非常大的对象”。我想通过用户提供的值获得objectbase的id,在本例中,category的id是一个包含两个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
{
"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)