javascript - Lodash - 深入查找对象数组

标签 javascript lodash

我有一个这样的对象数组

[
    {
        '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
            }
        ]
    },
]

propfoo 时,我需要对属性 Val 求和。 因此,我必须搜索元素并获取 propfoo 的所有对象。有了这个对象,我应该对 val 属性求和。

我尝试使用 _.find_.pick 等的多种组合,但我没有得到正确的结果。有人可以帮助我吗?

最佳答案

这是一个解决方案 flattens元素然后filterssumming 之前获取所需元素的结果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/

相关文章:

javascript - jQuery 选择器无法正常工作

javascript - 如何克服 IE8 在 SCORM 第 4 版合规性测试 SX-05 中获得 "stuck"的问题?

javascript - 使用 lodash 对包含文档的数组进行排序

javascript - 如何将元素插入数组而不重复它们?

javascript - 将数组对象合并在一起 - lodash

javascript - 如何根据id获取所有文档?

javascript - 聚合对象数组中的点赞数

javascript - Javascript 中声明的、未初始化的变量会发生什么?它有值(value)吗?

javascript - 如何从对象数组中按数组选取元素

javascript - 两个对象数组与 lodash 的区别