【问题标题】:Javascript ternary if statement, assigning it to a variable and incrementationJavascript三元if语句,将其分配给变量并递增
【发布时间】:2020-08-20 00:35:51
【问题描述】:

所以,我有这段代码,它确实有效: (散列是一个像这样的对象:{"bob" => "12, "Roger" => "15", etc},isGood(key) 是一个调用函数 isGood 的函数,如果玩家是好或不好)

let score = 0;
Object.keys(hash).forEach((key) => {
  isGood(key) === true ? score += parseInt(hash[key], 10) : score -= parseInt(hash[key], 10);
});
return score;

我收到此错误消息:

Expected an assignment or function call and instead saw an expression

我设法使它工作而没有收到此错误消息,如下所示:

let score = 0;
Object.keys(hash).forEach((key) => {
  score = isGood(key) ? score + parseInt(hash[key], 10) : score - parseInt(hash[key], 10);
});
return score;

但是,为什么第一个不是正确的方法,即使它有效?很抱歉,我在 Javascript 中的约定有问题。 提前致谢! 奥利维尔

【问题讨论】:

  • 三元组需要一个变量来存储其结果。此:isGood(key) === true ?... 未分配给 score 此:score = isGood(key) ? ... 确实将值分配给 score
  • let change = parseInt(hash[key], 10); score += isGood(key) ? change : -change; 可能是一种更具可读性和更少重复性的编写方式。或者return Object.entries(hash).reduce((score, [k, v]) => score + isGood(k) ? parseInt(v, 10) : -parseInt(v, 10))
  • 谢谢我现在明白了!还要感谢 Stuart 向我介绍 reduce,我会更仔细地检查一下。

标签: javascript object if-statement assign ternary


【解决方案1】:

这是有效的 JavaScript 代码。我相信错误消息来自 jshint,它是一个 linter。

这是一个相关的答案: Ternary operator displays error in JSHint - Expected an assignment or function call and instead saw an expression

归根结底,这是一个风格问题,但在三元运算符中出现副作用是出乎意料的,这解释了为什么 linter 有规则来指出它。这使得推理代码变得更加困难,因此您通常会看到一个 if-then-else 结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-02
    • 2021-02-02
    • 2017-01-07
    • 2011-08-26
    • 2019-09-06
    • 2016-02-08
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多