JavaScript按字符串过滤数组调用includes报undefined如何解决
报错原因
你的推测正确,报错触发的核心原因是数组中存在未携带AcctNum属性的元素,访问这类元素的o.AcctNum会返回undefined,对undefined调用includes方法就会抛出TypeError类型错误。
解决方案
只需修改filter的回调逻辑,先校验AcctNum属性合法性再执行匹配即可,两种常用实现方案如下:
方案1:可选链写法(ES2020+环境适用)
借助可选链操作符?.简化判断,若AcctNum不存在会直接返回假值,自动被filter过滤:
var accDC = acco.filter(o => o.AcctNum?.includes(payacc));
方案2:显式校验写法(兼容低版本JS环境)
显式判断属性存在且为字符串类型,再执行匹配逻辑,兼容性更好:
var accDC = acco.filter(o => { // 跳过无AcctNum属性、或属性不是字符串的元素 if (typeof o.AcctNum !== 'string') return false; return o.AcctNum.includes(payacc); });
两种方案都可以正常过滤出AcctNum包含目标字符串的元素,不会触发报错。
内容的提问来源于stack exchange,提问作者augustus182l
相关产品推荐
相关产品推荐

