猿问

Javascript - 数组中的分数总和

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


[

  { tile: "N", score: 1 },

  { tile: "K", score: 5 },

  { tile: "Z", score: 10 },

  { tile: "X", score: 8 },

  { tile: "D", score: 2 },

  { tile: "A", score: 1 },

  { tile: "E", score: 1 }

]

我试过使用这个功能:


function maximumScore(tileHand) {

        return tileHand.reduce((p,c) => p.score + c.score, 0);

    }

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


为什么会这样?


喵喵时光机
浏览 167回答 4
4回答

繁花不似锦

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. tileHandvar scoreTotal = tileHand.reduce(function(prev, cur) {  return prev + cur. score;}, 0);console.log('Total Score:', scoreTotal);参考:https://gist.github.com/benwells/0111163b3cccfad0804d994c70de7aa1

宝慕林4294392

p 代表前一个(或累加器/总和),c 代表当前。您正在将以前的分数与当前分数相加。然后告诉 reduce 函数从 0 开始所以它试图求和 0.score + c.score 这将给出 NaN。只需做 p + c.score所以循环将是0 + 1 = 11 + 5 = 66 + 10 = 16ETC
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答