分配给功能参数'a'Eslint的属性

时间:2019-02-24 05:53:00

标签: javascript reactjs eslint

我正在尝试使用自定义函数对对象数组进行排序。
因此,我定义了函数

   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设置的。因此,我认为禁用此规则的权利不成立。
所以有人可以告诉我如何解决它,或者禁用此规则是否可以。

2 个答案:

答案 0 :(得分:1)

无需重新分配函数参数(pos)的a, b属性。您应该只分配一个新变量(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;

    }
}

答案 1 :(得分:1)

您将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