JS按connectors过滤base列表仅匹配首项的问题排查与修复
问题原因
原代码筛选逻辑仅读取connectors数组下标为0的首个元素做匹配,因此只有目标值出现在connectors列表第一位时才会被命中,非首位的匹配值会被直接忽略。
此前尝试的两种修改写法失效原因如下:
base.connectors是数组类型,直接和筛选的字符串值做匹配永远不会相等- 数组对象本身不存在
standard属性,base.connectors.standard的取值为undefined,无法命中任何筛选值
修复方案
使用数组的some()方法遍历每个base下的全量connectors列表,只要列表中任意一项的standard属性在筛选条件内,就将该base纳入筛选结果。修复后完整代码如下:
calcBaseList: function() { let tmp = []; if (this.filterConnector.length > 0) { this.listBase.forEach((base) => { // 校验当前base下所有connector,存在任意一项匹配筛选条件即保留 const hasMatchedConnector = base.connectors.some(connector => this.filterConnector.includes(connector.standard) ) if (hasMatchedConnector) { tmp.push(base); } }); } else { tmp = this.listBase; } // 注:原代码中filtredBase为拼写错误,此处修正为标准拼写filteredBase,若业务中已引用原变量名可自行替换回filtredBase this.filteredBase = tmp; },
逻辑说明
some()方法遍历connectors数组时,遇到第一个满足判断条件的项就会终止遍历并返回true,相比全量遍历性能更优- 完全兼容connectors列表长度为1或多个的场景,不会漏匹配非首位的connector
- 无筛选条件时返回全量列表的逻辑和原代码保持一致,不会影响原有正常功能
内容的提问来源于stack exchange,提问作者Llexii
相关产品推荐
相关产品推荐

