将值作为具有下划线的简化对象的键

时间:2014-04-29 13:57:58

标签: javascript coffeescript underscore.js

我设法减少并合并我的Price Amount对象:

stooges = [{Price: 1.2, Amount: 40}, {Price: 1.3, Amount: 50}, {Price: 1.2, Amount: 60}];


inputarray = _.map  _.groupBy(stooges, 'Price'), (v, k) -> 
        {  Price: k
        Amount : _.reduce(v, ((m, i) -> m + i['Amount']), 0)}

console.log(inputarray)

创建以下

[Object { Price="1.2", Amount=100}, Object { Price="1.3", Amount=50}]

但也许分组很多。无论如何我试着像这样结束

[ { 1.2 : 100 } , { 1.3 : 50 } ]

将价格作为关键,将金额作为价值。 该死的我真傻。

2 个答案:

答案 0 :(得分:0)

试试这个:

_.map(_.groupBy(stooges, 'Price'), function(v, k){
  var obj = {};
  obj[k] = _.reduce(v, function(m, i){ return m + i['Amount'] }, 0);
  return obj;
})

返回以下内容:

[{ "1.2": 100 }, { "1.3": 50 }]

编辑:我不确定返回数组是否有用。如果你使用的是Lo-Dash而不是Underscore(我建议你这样做),你可以使用它来代替一个对象,它将所有的价格作为总金额的关键:

_(stooges).groupBy('Price').mapValues(function(stooge){
  return _(stooge).pluck('Amount').reduce(function(total, amount){
    return total + amount;
  })
}).value()

返回以下内容:

{ "1.2": 100, "1.3": 50 }

答案 1 :(得分:0)

result1 = _.pluck inputarray,' Price'

result2 = _.pluck inputarray,' Amount'

boo = _.object(result1,result2);

感谢现在它不像你那样优雅!