我有一个来自外部api的'非常大的对象'。我希望通过用户提供的值获取对象库的id,在这种情况下,类别的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:2045,如果其中一个类别id与用户提供的id匹配。因此,例如用户提供8,它应该返回ID为20145和20456的id,如果用户提供了17,则应该返回20456的id。
我试过
const acti = activitiesbigobjct.filter((e) => e.categories);
但我得错误过滤器不是函数错误
我试过像
这样的东西 for(const [key, value] of Object.entries(activitiesbigobj)) {
console.log(value)
}
但我认为它不是最佳解决方案,任何想法?
答案 0 :(得分:0)
如果您只需要这些值,只需使用Object.values
:
Object.values(activitiesbigobjct).filter((e) => e.categories.some(id => id === 8)).map(e => e.id);
答案 1 :(得分:0)
您可以使用Object.keys()
和Array.forEach()
var obj = { "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" }] }};
var userId = 8;
var result = [];
Object.keys(obj).forEach((key)=>{
obj[key].categories.forEach((category)=>{
if(category.id === userId)
result.push(obj[key].id);
});
});
console.log(result);
答案 2 :(得分:0)
您可以过滤对象的值并映射id
。
function getId(subId) {
return Object
.values(data)
.filter(({ categories }) => categories.some(({ id }) => id === subId))
.map(({ id }) => id)
}
var data = { "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" }] } };;
console.log(getId(8));
答案 3 :(得分:0)
您的第一个错误正在发生,因为.filter()
是数组上的函数,而您的大对象就是对象。
您可以将大对象放入数组中,然后使用.filter().map()
进行首先过滤,然后获取所需的值。
一个简单的例子:
[{ id: 1, name: "a"},{ id: 2, name: "b" }].filter(x => x.id === 2).map(x => x.name)
将从过滤结果中返回"b"
name
属性。
如果孩子id
匹配,您需要做一些与父母的category
不同的事情,例如:
[<your data>].filter(x => x.categories.id === <your id (17)>).map(x => x.id)