我有一个看起来像这样的对象:
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翻译到咖啡,我希望有一个更优雅的解决方案。)
答案 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)