计算与理解

时间:2012-09-24 12:25:15

标签: coffeescript

假设我有以下内容:

scoringObject = 
  a : -1
  b : 0
  c : 1
  d : 2

resultsArray = ['a','c','b','b','c','c','d']

使用Coffeescript,我如何计算总分数(示例中为+4)?

2 个答案:

答案 0 :(得分:1)

由于你的例子没有多大意义,我会假设你拥有的是:

resultsArray = ['a','c','b','b','c','c','d']

使用帖子中的scoringObject。然后你可以像这样计算:

aggregateScore = 0
aggregateScore += scoringObject[k] for k in resultsArray
# => 4

如果我错误地假设,请告诉我。

答案 1 :(得分:0)

如果您不介意使用ECMAScript 5中的功能,Array::reduce可以让您非常简洁地表达这类内容:

aggregateScore = resultsArray.reduce ((sum, x) -> sum + scoringObject[x]), 0

(我觉得reduce的参数顺序非常不幸;初始值应该是第一个,而减少函数应该是最后一个)

Underscore.js provides跨浏览器减少实现:)