我有一个这样的对象数组
[
{
'a': 10,
elements: [
{
'prop': 'foo',
'val': 10
},
{
'prop': 'bar',
'val': 25
},
{
'prop': 'test',
'val': 51
}
]
},
{
'b': 50,
elements: [
{
'prop': 'foo',
'val': 30
},
{
'prop': 'bar',
'val': 15
},
{
'prop': 'test',
'val': 60
}
]
},
]
当 prop
为 foo
时,我需要对属性 Val
求和。
因此,我必须搜索元素并获取 prop
为 foo
的所有对象。有了这个对象,我应该对 val
属性求和。
我尝试使用 _.find
、_.pick
等的多种组合,但我没有得到正确的结果。有人可以帮助我吗?
最佳答案
这是一个解决方案 flattens元素然后filters在 summing 之前获取所需元素的结果val 属性:
var result = _.chain(data)
.map('elements') // pluck all elements from data
.flatten() // flatten the elements into a single array
.filter({prop: 'foo'}) // exatract elements with a prop of 'foo'
.sumBy('val') // sum all the val properties
.value()
链接是一种在返回值之前对某些数据应用一系列操作的方法。上面的示例使用显式链接,但可以(也许应该)使用隐式链接编写:
var result = _(data)
.map('elements')
.flatten()
.filter({prop: 'foo'})
.sumBy('val');
关于javascript - Lodash - 深入查找对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41610948/