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

对象数组filter调用includes报null读取错误解决方案

问题排查与修复方案

错误根因

Cannot read properties of null (reading 'includes')报错触发逻辑非常明确:执行数组过滤时,被遍历元素的number_client字段存在null值,对null直接调用includes方法就会抛出该类型错误。

现有代码还存在几处会触发异常或冗余的逻辑:

  • 无意义的map拷贝:const newArray = datasClientService.map(val=>{ return val})仅做了一层浅拷贝,没有附加任何转换逻辑,完全可以移除,直接操作原数组即可。
  • 缺少数据源兜底:Redux store的初始化阶段,datasClientService、resultSearchClient可能为undefined或null,直接执行数组遍历、字符串方法会触发报错。
  • 渲染逻辑不合法:React不支持直接在JSX中渲染普通对象数组,直接将filterArray嵌入<p>标签会触发渲染异常。
  • 匹配逻辑隐患:includes为子串匹配规则,如果业务要求客户编号精确匹配,会出现短编号误命中长编号的问题,可根据实际业务要求调整匹配规则。

修复后可运行代码

const ClientComponent = ()=>{
   const resultSearchClient = useSelector((state)=> state.reducerSearchCriteria)
   const datasClientService = useSelector((state)=> state.reducerClientAdmin.state)
   // 数据源兜底,确保遍历目标始终为数组
   const sourceList = Array.isArray(datasClientService) ? datasClientService : []
   // 搜索关键字兜底,统一转字符串避免类型不匹配
   const searchKey = String(resultSearchClient ?? '')

   const filterArray = sourceList.filter(u => {
     // 兜底空的客户编号,避免调用includes报错
     const clientNumber = String(u?.number_client ?? '')
     // 若需精确匹配,替换为 return clientNumber === searchKey 即可
     return clientNumber.includes(searchKey)
   })
  
   return(
     <div>
       {filterArray.map(item => (
         <p key={item.number_client}>客户编号:{item.number_client}</p>
       ))}
    </div>
 )
}

export default ClientComponent;

补充说明

如果业务场景允许number_client为纯数字值,统一转字符串后再做匹配可以避免类型不一致导致的匹配失效问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:24:36