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

如何过滤含缺失键的对象数组?避免报错并返回匹配结果

问题

需要根据用户输入过滤对象数组,基于name、location、address三个键的值进行筛选,但部分对象缺少其中部分键,当前代码执行时会报错,希望忽略无对应键的对象,正常返回匹配结果。

示例数据:

const data = [
  {
    name: "John Miller",
    age: 33,
    location: "Chicago",
    address: '1 help street'
  },
  {
    name: "Jane Doe",
    age: 78,
    address: '1 help me please lane'
  },
  {
    name: "Jamie Stevens",
    location: "San Diego",
    age: 32
  }
]

注:第二个对象无location键,第三个对象无address键。

当前处理函数:

const handleSearch = (query) => {
    const keys = ['name', 'location', 'address']
    const filter =  data.filter((row) => (
      keys.some((key) => (row[key].toLowerCase().includes(query))
    )))
    setFilteredData(filter)
  }

解决方案

报错原因是当对象没有对应键时,row[key]返回undefined,调用toLowerCase()会触发错误。只需在匹配前先判断键是否存在且对应值为字符串类型,即可解决问题:

修改后的代码:

const handleSearch = (query) => {
  const keys = ['name', 'location', 'address'];
  const lowerQuery = query.toLowerCase();
  const filter = data.filter((row) => 
    keys.some((key) => {
      const value = row[key];
      return typeof value === 'string' && value.toLowerCase().includes(lowerQuery);
    })
  );
  setFilteredData(filter);
}

关键说明

  • 通过typeof value === 'string'同时处理“键不存在”和“键对应值非字符串”的情况,避免报错。
  • 提前将query转为小写,减少循环内的重复转换操作,提升性能。
  • some方法会在找到第一个匹配项时停止遍历,保证筛选效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:15:34