微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javascript-分数总和

如何解决Javascript-分数总和

我对javascript比较陌生,并尝试对以下数组中的所有分数求和:

[
  { tile: "N",score: 1 },{ tile: "K",score: 5 },{ tile: "Z",score: 10 },{ tile: "X",score: 8 },{ tile: "D",score: 2 },{ tile: "A",{ tile: "E",score: 1 }
]

我尝试使用此功能

function maximumscore(tileHand) {
        return tileHand.reduce((p,c) => p.score + c.score,0);
    }

但是我得到的结果是NaN而不是28。但是,当我用p.score替换函数中的p时,得到的预期结果是28。

为什么会这样?

解决方法

reduce的第一个参数是累加器。因此,将值添加到其中。因此,它基本上是一个变量。

function maximumScore(tileHand) {
    return tileHand.reduce((p,c) => p + c.score,0);
}

这将继续为p添加分数,该分数从0开始

另请参见mozilla.org

,

这样做的原因是,您使用的.reduce()方法的回调最多包含4个参数,而第一个是 accumulator 。这意味着它保存了回调返回的所有先前结果的累加值。在这种情况下,它是一个数字,而不是一个对象。因此,在每次迭代中,您在p参数下拥有当前总和,而不是一个对象。

从文档中

accumulator

累加器累加回调的返回值。它是先前在的上一次调用中返回的累计值 回调-或initialValue(如果已提供)(请参见下文)。

,
// get sum of score prop across all objects in array i.e. tileHand
var scoreTotal = tileHand.reduce(function(prev,cur) {
  return prev + cur. score;
},0);

console.log('Total Score:',scoreTotal);

引用:https://gist.github.com/benwells/0111163b3cccfad0804d994c70de7aa1

,

p代表前一个(或累加器/总和),c代表当前。您正在将以前的分数与当前分数相加。然后,您告诉reduce函数从0开始

因此,它尝试将0.score + c.score相加,得出NaN。

只要做p + c.score

所以循环将会

0 +1 = 1

1 + 5 = 6

6 + 10 = 16

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。