【问题标题】:Assignment to property of function parameter 'a' Eslint分配给函数参数'a'Eslint的属性
【发布时间】:2019-02-24 05:52:59
【问题描述】:

我正在尝试使用自定义函数对对象数组进行排序。
所以,我定义了我的功能

   sortingAlgo = (a, b) => {
        // we need to use custom sorting algorithm to meet our requirements.
        a.pos = a.pos.toUpperCase();
        b.pos = b.pos.toUpperCase();
        if(a.pos.slice(0, 1) === b.pos.slice(0, 1)) {
          if (parseInt(a.pos.slice(1)) < parseInt(b.pos.slice(1))){
            return -1;
          }
          if (parseInt(a.pos.slice(1)) > parseInt(b.pos.slice(1))){
            return 1;
          }
          return 0;
        } else {
          if (parseInt(a.pos.slice(0, 1)) < parseInt(b.pos.slice(0, 1))){
            return -1;
          }
          if (parseInt(a.pos.slice(0, 1)) > parseInt(b.pos.slice(0, 1))){
            return 1;
          }
          return 0;

        }
      }

我这样称呼它。

const sortedProducts = data.data.sort(this.sortingAlgo);

现在我得到了 Eslint 错误提示。

**

  • 169:5 错误分配给函数参数“a”的属性 无参数重新分配
  • 170:5 错误分配给函数参数“b”的属性 无参数重新分配

**

我搜索了一下,发现这个规则是由airBnB设置的。所以我不认为禁用这条规则是正确的。
那么有人可以告诉我如何解决它,或者禁用此规则是否可以。

【问题讨论】:

    标签: javascript reactjs eslint


    【解决方案1】:

    无需重新分配函数参数 (a, b) 的 pos 属性。您应该只分配一个新变量 (aPos, bPos),这是最佳实践,因此 ESLint 会抱怨。

    您应尽可能避免在代码中出现不必要的mutations/side-effects,以防止出现错误并创建整体更高效的程序架构。

    在这种情况下更具体..

    ESLint: Disallow Reassignment of Function Parameters (no-param-reassign)

    const sortingAlgo = (a, b) => {
        // we need to use custom sorting algorithm to meet our requirements.
        let aPos = a.pos.toUpperCase(),
            bPos = b.pos.toUpperCase();
    
        if (aPos.slice(0, 1) === bPos.slice(0, 1)) {
            if (parseInt(aPos.slice(1)) < parseInt(bPos.slice(1))) {
                return -1;
            }
            if (parseInt(aPos.slice(1)) > parseInt(bPos.slice(1))) {
                return 1;
            }
            return 0;
        } else {
            if (parseInt(aPos.slice(0, 1)) < parseInt(bPos.slice(0, 1))) {
                return -1;
            }
            if (parseInt(aPos.slice(0, 1)) > parseInt(bPos.slice(0, 1))) {
                return 1;
            }
            return 0;
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      你的 ESLint 被配置为不允许重新分配参数,即如果一个函数有 2 个参数(a,b),那么你不能在函数体中重新分配这 2 个变量。

      要修复此错误,可以:

      • 禁用 eslint 规则(在您的 .eslintrc 中或仅用于函数)
      • 创建新变量以避免重新分配给 a 和 b(见下文):
       sortingAlgo = (a, b) => {
              // we need to use custom sorting algorithm to meet our requirements.
              const aPos = a.pos.toUpperCase();
              const bPos = b.pos.toUpperCase();
              ...
      
      

      然后将对a.posb.pos的引用替换为aPosbPos

      【讨论】:

        猜你喜欢
        • 2021-12-27
        • 1970-01-01
        • 2019-11-09
        • 1970-01-01
        • 2011-09-22
        • 1970-01-01
        • 2020-05-10
        • 2013-02-25
        • 2018-05-20
        相关资源
        最近更新 更多