如何修改代码实现按对象所有字段过滤对象数组?
问题:匹配对象所有字段过滤数组
原始数据
let object = { name: "john", lastName: 'doe' } let arrayOfObjects = [ { name: 'john', lastName: 'fake' }, { name: 'josh', lastName: 'doe' }, { name: 'john', lastName: 'doe', } ]
原始代码
let filteredNames = [] arrayOfObjects.filter((map)=> { Object.keys(object).map(key=> { if(map[key].toLowerCase() === filters[key].toLowerCase()) { // console.log(map) filteredNames.push(map) } }) })
问题说明
这段代码会返回所有对象,因为只要匹配至少一个字段就会将对象加入结果,实际需要匹配所有字段才保留。
解决方案
用every()替代map()检查所有字段是否匹配,同时利用filter()的返回值直接生成结果,不需要额外数组:
const filteredNames = arrayOfObjects.filter(item => { return Object.keys(object).every(key => { return item[key].toLowerCase() === object[key].toLowerCase(); }); });
代码说明
filter()会保留回调返回true的元素,我们在回调中判断当前对象是否满足所有字段匹配条件。every()遍历所有字段,只有当全部字段的匹配判断为true时,整体返回true,刚好实现“匹配所有字段”的需求。- 修正了原代码中的笔误:
filters改为object(你的过滤基准对象)。
内容的提问来源于stack exchange,提问作者Lovely
相关产品推荐
相关产品推荐

