如何通过属性过滤对象数组

时间:2020-04-13 14:40:17

标签: javascript arrays filtering

我有一个对象数组,如下所示:

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()函数,但是它仍然返回整个数组。

3 个答案:

答案 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'))

相关问题