如何根据testid筛选含多ID的JavaScript数组对象?
问题分析与解决
你的代码问题出在filter回调里用了map方法——map返回的是一个布尔值数组,而filter判断的是这个数组是否为「真值」(只要数组非空就会被视为true),所以不管testid是什么,所有数组元素都会被保留,导致结果始终相同。
修正方案
我们需要用some或者includes来判断分割后的id数组里是否包含目标testid,这两个方法都会返回布尔值,正好符合filter的要求:
方法1:使用some(兼容性更好)
this.state.testid && arr && arr.filter(dd => { // 用正则分割,兼容带空格和不带空格的逗号分隔(比如"226, 228"和"202,236,289") const idList = dd.id.split(/,\s*/); // some会检查数组中是否有至少一个元素匹配testid return idList.some(id => id === this.state.testid); })
方法2:使用includes
this.state.testid && arr && arr.filter(dd => { const idList = dd.id.split(/,\s*/); // includes直接判断数组是否包含目标值 return idList.includes(this.state.testid); })
额外注意点
如果你的testid是数字类型(比如testid = 228),而数组里的id是字符串,记得要统一类型,避免匹配失败:
// 把testid转成字符串 const targetId = String(this.state.testid); this.state.testid && arr && arr.filter(dd => { const idList = dd.id.split(/,\s*/); return idList.includes(targetId); })
内容的提问来源于stack exchange,提问作者Lex V
相关产品推荐
相关产品推荐

