【问题标题】:Reduce function returning assignment is throwing error (ESLint issue: no-return-assign)Reduce 函数返回赋值抛出错误(ESLint 问题:no-return-assign)
【发布时间】:2018-05-12 18:34:46
【问题描述】:

我的代码(有效):

const calculateBalance = (coins) => {
  console.log('coins', coins);
  return coins.reduce((bal, coin) => (bal += parseInt(coin.balance)), 0);
};

基本上我只想将我投资组合中的所有硬币余额加起来,但是我遇到了一个 eslint 错误。

箭头函数不应返回赋值。

谷歌搜索我发现了这个:https://eslint.org/docs/rules/no-return-assign

JavaScript 的一个有趣但有时令人困惑的方面是赋值几乎可以在任何时候发生。因此,当真正的意图是进行比较时,错误的等号最终会导致赋值。在使用 return 语句时尤其如此。

这里有一个如何做的例子:

function doSomething() {
    return (foo = bar + 2);
}

然而这是我实现的,但 eslint 仍然在抱怨......有没有办法更新我上面的代码块以使其通过?

【问题讨论】:

  • 你为什么还要分配 (+=) 那里?一个简单的添加 (+) 也可以做到这一点。
  • 另外一个问题,parseInt(无base)在做什么?
  • 啊,谢谢,这确实修复了我的实际代码......我想在这种情况下没有可以修复+= 的情况吗?无论如何都想发布您对逻辑的答案。
  • @NinaScholz 你是对的,我应该在那部分使用Number()。
  • bal + +coin.balance 就足够了,如果coin.balance 是一个字符串。

标签: javascript return eslint


【解决方案1】:

根据规格。 (这里MDN)

reduce() 方法对 accumulator 应用一个函数,每个 数组中的元素(从左到右)将其减少为单个 价值。


由于您的bal 是您的累加器,因此只需执行bal + parseInt(coin.balance)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2019-10-30
    • 2022-01-24
    • 2019-01-20
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多