简体   繁体   English

如何按属性过滤对象数组

[英]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,但它仍然返回整个数组。

This 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')

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM