如何在coffeescript中总结JSON对象的属性?

时间:2011-09-21 19:40:22

标签: json coffeescript

我有一个看起来像这样的对象:

object =
  title : 'an object'
  properties :
    attribute1 :
      random_number: 2
      attribute_values:
        a: 10
        b: 'irrelevant'
    attribute2 :
      random_number: 4
      attribute_values:
        a: 15
        b: 'irrelevant'
   some_random_stuff: 'random stuff'

我想在attribute1和attribute2上提取'a'值的总和 在Coffeescript中这样做的最佳方式是什么?

(我已经找到了一种方法,但这看起来就像Java翻译到咖啡,我希望有一个更优雅的解决方案。)

3 个答案:

答案 0 :(得分:4)

以下是我提出的建议(根据评论编辑为更通用):

sum_attributes = (x) =>
  sum = 0
  for name, value of object.properties 
    sum += value.attribute_values[x]
  sum

alert sum_attributes('a') # 25
alert sum_attributes('b') # 0irrelevantirrelevant

所以,这就是你想要的......但它可能并不完全符合你想要的字符串。 您可能希望传递累加器种子,例如sum_attributes 0, 'a'sum_attributes '', 'b'

答案 1 :(得分:3)

Brian的回答很好。但是如果你想引入像Underscore.js这样的函数式编程库,你可以编写一个更简洁的版本:

sum = (arr) -> _.reduce arr, ((memo, num) -> memo + num), 0
sum _.pluck(object.properties, 'a')

答案 2 :(得分:1)

total = (attr.attribute_values.a for key, attr of obj.properties).reduce (a,b) -> a+b

sum = (arr) -> arr.reduce((a, b) -> a+b)
total = sum (attr.attribute_values.a for k, attr of obj.properties)