JavaScript多对象数组过滤:匹配Category与Title并获取Pending值
解决同时匹配Category和Title的过滤问题
我看出来你的问题啦——原来的代码只检查了Category字段的匹配,没处理Title是数组的情况,而且逻辑上只要匹配到一个key就返回,没法确保两个条件同时满足。咱们来一步步修正:
原代码的问题点
- 对于
Title字段,你要匹配的是数组里的某个元素,但原代码用了item[key] === filter[key],数组和字符串肯定不会相等,所以这部分永远匹配不上 - 循环里只要有一个key匹配就直接返回,没法保证所有过滤条件都满足
修正后的代码
把你原来的filter函数替换成下面这段:
let s = autoNotifyCategories.notify.filter(function(item) { // 确保所有过滤条件都满足 let matchesAll = true; for (var key in filter) { if (key === 'Title') { // Title是数组,用includes判断是否包含目标值 if (!item[key].includes(filter[key])) { matchesAll = false; break; } } else { // 其他字段直接比较 if (item[key] !== filter[key]) { matchesAll = false; break; } } } return matchesAll; });
代码解释
- 先初始化
matchesAll为true,默认认为当前item符合所有条件 - 遍历过滤条件的每个key:
- 如果是
Title字段,用数组的includes方法检查是否包含过滤的标题值 - 其他字段(比如
Category)直接做全等比较
- 如果是
- 只要有一个条件不满足,就把
matchesAll设为false并跳出循环 - 最后返回
matchesAll,只有所有条件都满足的item才会被保留
这样修改后,点击按钮就能正确过滤出Category3且包含Title4的对象,弹出它的Pending值啦~
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

