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

JavaScript中如何根据对象属性值匹配筛选返回对应对象数组?

原有代码问题点
  • Object.values(e)返回的是当前对象所有属性值组成的数组,直接和单个值val做全等判断永远不成立,需要先判断数组中是否包含目标值
  • Array.filter()的回调要求返回布尔值来标记当前元素是否符合筛选条件,原代码返回数组result不符合规则,会导致所有元素都被保留
  • 自定义的result是函数内部局部变量,外部无法直接访问,且getList函数本身没有返回处理结果,调用后拿不到返回值
  • 用法冗余:filter本身就会返回符合条件的新数组,不需要额外定义空数组手动push元素
修正后代码
const objarr = [
  {id:1, email: 'xyz@gmail.com', value: 10, name: 'ram'},
  {id:2, email: 'xyz@gmail.com', value: 20, name: 'Tom'},
  {id:3, email: 'ss@gmail.com', value: 30, name: 'Lucas'},
  {id:4, email: 'ct@gmail.com', value: 40, name: 'Chris'},
  {id:5, email: 'tam@gmail.com', value: 30, name: 'Lucas Tim'}
]

function getList(val){
  // 筛选逻辑:只要对象任意属性值等于传入val就保留
  return objarr.filter(item => Object.values(item).includes(val))
}

// 测试
console.log(getList('xyz@gmail.com'))
console.log(getList('Chris'))
扩展说明

如果需要支持模糊匹配(比如输入Lucas就能同时匹配到Lucas和Lucas Tim两个结果),可以把筛选逻辑改成下面的写法,自动兼容数字、字符串等不同类型的属性值:

function getList(val){
  const matchVal = String(val).toLowerCase()
  return objarr.filter(item => {
    return Object.values(item).some(v => String(v).toLowerCase().includes(matchVal))
  })
}

内容的提问来源于stack exchange,提问作者dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:36:02