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

JavaScript的.filter方法如何通过数组批量排除指定分类和商品

JS filter多排除项优化实现

逐行写不等值判断的方式在排除项增多时维护性极差,通过数组内置方法可以把排除规则抽离为独立配置数组,无需重复编写判断逻辑。

可用代码

先把需要排除的分类、商品单独维护为数组,后续增减排除规则只需要修改这两个数组,不需要调整过滤逻辑:

var excludedcats = [3, 5, 8, 11]
var excludedproducts = [191, 139, "string instead of int"]

var myfilter = myjson.filter(function(c) {
    return !excludedcats.includes(c.category) && !excludedproducts.includes(c.product)
});

逻辑说明

  • 数组.includes(目标值)是JS数组的内置方法,会遍历检查目标值是否存在于数组中,存在返回true,不存在返回false
  • 方法前加!为结果取反:!excludedcats.includes(c.category)等价于之前逐行编写的所有分类不等判断,含义为「当前分类不在排除列表中」
  • 两个判断条件用&&连接,只有同时满足分类、商品都不在排除列表时,数据才会被保留,和原有代码的执行效果完全一致

老旧环境兼容写法

如果需要兼容IE11等不支持includes方法的运行环境,可以替换为indexOf实现,逻辑完全相同:

var myfilter = myjson.filter(function(c) {
    // indexOf未匹配到目标值时固定返回-1,判断等于-1即代表值不在排除数组内
    return excludedcats.indexOf(c.category) === -1 && excludedproducts.indexOf(c.product) === -1
});

你之前直接写c.category != excludedcats不生效的原因是:excludedcats是数组类型,直接和数字、字符串类型的字段值做比较,永远会判定为不相等,无法实现逐个匹配排除项的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:48:41