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

如何禁止修改函数参数,允许Array.reduce累加器修改?

禁止修改函数参数但允许Array.reduce累加器修改的ESLint配置

你需要的是ESLint内置的no-param-reassign规则,它专门用来限制对函数参数的修改,同时可以通过配置允许Array.reduce中对累加器的操作。

核心配置

在你的ESLint配置文件(比如.eslintrc.js或.eslintrc.json)中添加如下规则:

module.exports = {
  // 其他配置...
  rules: {
    "no-param-reassign": [
      "error",
      {
        // 禁止修改参数的属性(对应你示例中修改data.field的场景)
        props: true,
        // 允许对名为acc的参数修改属性(适配reduce累加器的常见命名)
        ignorePropertyModificationsFor: ["acc"],
        // 可选:如果你的累加器用了其他命名(比如accumulator),可以添加到数组里
        // ignorePropertyModificationsFor: ["acc", "accumulator"]
      }
    ]
  }
};

规则效果说明

  • 错误示例触发报错:你提供的incorrectUpdate函数中修改data.field的操作会被no-param-reassign规则标记为错误,符合你的需求。
  • 正确示例通过校验:validUpdate函数使用对象扩展运算符返回新对象,未修改原参数,不会触发规则。
  • Array.reduce操作被允许:如下代码中对累加器acc的修改不会被规则拦截:
const totalCount = [1, 2, 3].reduce((acc, item) => {
  acc.count += item; // 此操作被允许
  return acc;
}, { count: 0 });

扩展配置说明

如果你的项目中累加器有多种命名方式,也可以用正则匹配来放宽限制:

"no-param-reassign": [
  "error",
  {
    props: true,
    // 匹配所有以acc开头的参数名
    ignorePropertyModificationsForRegex: ["^acc"]
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:52:13