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

如何编写不会在首次返回false时终止的JS数组filter过滤函数

问题原因

你对filter的运行机制存在误解,同时代码逻辑有两处错误:

  • Array.filter 不会在首次返回false时终止,它会遍历完所有待处理元素,仅保留回调返回值为true的项。
  • 回调内的do-while循环在第一次执行时就会触发return语句,循环根本不会重复执行;此外你错误使用jobs数组的遍历索引i去读取filteredLocations的元素,两个数组长度不一致时会出现索引错位、越界问题:比如jobs第三个元素索引为2,而filteredLocations长度为2,有效索引只有0、1,读取filteredLocations[2]会得到undefined,比对自然不成立。
修复方案

不需要手写嵌套循环做逐位比对,直接判断当前职位的地点是否在筛选地点列表中即可:

const jobs = [
    {id: 1, location: 'AA'},
    {id: 2, location: 'BB'},
    {id: 3, location: 'CC'},
]
const filteredLocations = ['AA', 'CC']
// 筛选逻辑:当前元素的location在筛选列表中就保留
const filteredJobs = jobs.filter(el => filteredLocations.includes(el.location))

运行后filteredJobs会返回id为1和3的两个对象,完全符合预期。

如果需要兼容不支持includes的老旧运行环境,可以替换为indexOf实现:

const filteredJobs = jobs.filter(function(el) {
    return filteredLocations.indexOf(el.location) !== -1
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:01:18