【发布时间】: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