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

使用JavaScript filter函数时遇no-return-assign ESLint错误求助

问题分析与解决

错误原因

触发ESLint的no-return-assign错误,核心问题有两点:

  • filter的回调函数会隐式返回最后执行的表达式结果,你在回调里写的country += ...是赋值操作,这个赋值表达式的结果会被当作filter的过滤条件返回。ESLint的这条规则禁止在return语句(包括隐式return)中出现赋值,目的是避免开发者误将赋值当作相等判断(比如把===写成=)。
  • 你误用了filter的设计用途:filter是用来过滤数组生成新数组的,不是用来执行修改外部变量这类副作用操作的,这属于JavaScript的反模式。
  • 另外你的代码还会导致结果不符合预期:拼接时额外加了单引号,最终会得到'SE''NL''FR',而非目标的SENLFR。

正确实现方式

要获取数组唯一值并拼接成目标字符串,推荐两种简洁写法:

方法1:利用Set(现代环境首选)

Set会自动去重,转成数组后直接拼接即可:

const countryCodes = ['SE', 'NL', 'SE', 'FR'];
const country = [...new Set(countryCodes)].join('');
// 最终结果:'SENLFR'

方法2:兼容旧环境的filter写法

先通过filter过滤出唯一值,再拼接成字符串:

const countryCodes = ['SE', 'NL', 'SE', 'FR'];
// 过滤数组中的唯一值
const uniqueCodes = countryCodes.filter((code, index) => countryCodes.indexOf(code) === index);
// 拼接成目标字符串
const country = uniqueCodes.join('');
// 最终结果:'SENLFR'

原写法的额外问题

  • 用filter做副作用操作(修改外部变量country)违背了函数式编程的设计原则,代码可读性和可维护性差。
  • 隐式返回赋值结果会让filter生成的过滤数组完全不符合预期(会变成包含多次拼接后字符串的数组)。

内容的提问来源于stack exchange,提问作者R.Almoued

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:55:29