[英]How to filter an array of objects by attribute
I've got an array of objects as follows:我有一个对象数组,如下所示:
finalistsCollection = [
{ name: 'Ann' , sections: [{id: '132', name: 'someName'}, {id: '456', name: 'someName'}] },
{ name: 'Jack' , sections: [{id: '798', name: 'someName'}] },
{ name: 'Morgan', sections: [{id: '456', name: 'someName'}] },
{ name: 'Billy', sections: [{id: '132', name: 'someName'}, {id: '456', name: 'someName'}]},
{ name: 'Monica', sections: [{id: '798', name: 'someName'}] }
]
How to filter this array by id value?如何按id值过滤此数组? For now, I've made filtering if a
sections
array has only one object inside:现在,如果
sections
数组内部只有一个 object,我已经进行了过滤:
filter(directionId) {
filteredCollection = this.finalistsCollection.filter((item) => item.sections[0].id === directionId
}
I've tried to use map()
function after the filter, but it still returns the whole array.我尝试在过滤器之后使用
map()
function,但它仍然返回整个数组。
let finalistsCollection = [
{ name: 'Ann' , sections: [{id: '132', name: 'someName'}, {id: '456', name: 'someName'}] },
{ name: 'Jack' , sections: [{id: '798', name: 'someName'}] },
{ name: 'Morgan', sections: [{id: '456', name: 'someName'}] },
{ name: 'Billy', sections: [{id: '132', name: 'someName'}, {id: '456', name: 'someName'}]},
{ name: 'Monica', sections: [{id: '798', name: 'someName'}] }
]
function filter(directionId) {
let filteredCollection = finalistsCollection.filter((item) => {
for (const section of item.sections) {
if (section.id === directionId) {
return true
}
}
return false
})
console.log(filteredCollection)
}
filter('456')
Hope this helps希望这可以帮助
let finalistsCollection = [
{ name: 'Ann' , sections: [{id: '132', name: 'someName'}, {id: '456', name: 'someName'}] },
{ name: 'Jack' , sections: [{id: '798', name: 'someName'}] },
{ name: 'Morgan', sections: [{id: '456', name: 'someName'}] },
{ name: 'Billy', sections: [{id: '132', name: 'someName'}, {id: '456', name: 'someName'}]},
{ name: 'Monica', sections: [{id: '798', name: 'someName'}] }
]
function filter(directionId) {
return finalistsCollection.filter(item =>
item.sections.some(x => x.id === directionId)
);
}
console.log(filter('456'));
You can use a small trick here as the condition:你可以在这里使用一个小技巧作为条件:
sections.map(section=>section.id).includes(directionId)
finalistsCollection = [ { name: 'Ann', sections: [{id: '132', name: 'someName'}, {id: '456', name: 'someName'}] }, { name: 'Jack', sections: [{id: '798', name: 'someName'}] }, { name: 'Morgan', sections: [{id: '456', name: 'someName'}] }, { name: 'Billy', sections: [{id: '132', name: 'someName'}, {id: '456', name: 'someName'}]}, { name: 'Monica', sections: [{id: '798', name: 'someName'}] } ] function filter(directionId) { return finalistsCollection.filter((item) => item.sections.map(section=>section.id).includes(directionId)) } console.log(filter('798')) console.log(filter('456')) console.log(filter('112'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.