You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改代码实现按对象所有字段过滤对象数组?

问题:匹配对象所有字段过滤数组

原始数据

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:35:50