我有一个对象数组,如下所示:
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'}] }
]
如何通过 id 值过滤此数组?现在,如果sections
数组中只有一个对象,我将进行过滤:
filter(directionId) {
filteredCollection = this.finalistsCollection.filter((item) => item.sections[0].id === directionId
}
我尝试在过滤器之后使用map()
函数,但是它仍然返回整个数组。
答案 0 :(得分:0)
此works:
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')
答案 1 :(得分:0)
希望这会有所帮助
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'));
答案 2 :(得分:-1)
您可以在此处使用一个小技巧作为条件:
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'))