lodash _.sum и _.sumBy
September 9, 2019
Вчера решил довольно простую задачку: есть массив объектов, у некоторых объектов одинаковые ключи. Нужно взять эти объекты с одинаковыми ключами, объединить, а цифровые значения просуммировать. Т.е. из такого:
var data = [
{
alias: 'three',
price: 100
},
{
alias: 'two',
price: 50
},
{
alias: 'three',
price: 100
},
{
alias: 'three',
price: 100
},
{
alias: 'two',
price: 50
}
];
Нужно получить примерно такое:
[{
alias: "three",
val: 300
},
{
alias: "two",
val: 100
}]
Для lodash v4 все просто:
var result = _(data)
.map('alias')
.uniq()
.map(alias => ({
alias: alias,
val: _(data).filter({ alias: alias }).sumBy('price')
}))
.value();
В lodash v3 _.sumBy нет, поэтому обходимся встроенной _.sum:
var result = _(data)
.map('alias')
.uniq()
.map(alias => ({
alias: alias,
val: _.sum(_.pluck(_.filter(data, {alias: alias}), 'price'))
}))
.value();
Демо
lodash v3
lodash v4