我有一个像这样的对象数组
[ { '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 } ] }, ]
我需要的是总结的财产Val
时,prop
是foo
.所以,我要通过要素进行搜索,并得到所有的对象,其中prop
是foo
.有了这个对象,我应该总结一下这个val
属性.
我试图使用许多组合_.find
,_.pick
等等,但我没有得到正确的结果.有人能帮我吗?
这是一个解决方案,它使元素变平,然后在求和 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');