lodash - 如何根据给定的条件从嵌套的对象数组中获取数组中的值?

标签 lodash

我正在使用 洛达什我有以下对象数组:

[{
    "id": 1,
    "values": [
        {
            "sub": "fr",
            "name": "foobar1"
        }, 
        {
            "sub": "en",
            "name": "foobar2"
        }
    ]
}, 
{
    "id": 2,
    "values": [
        {
            "sub": "fr",
            "name": "foobar3"
        },
        {
            "sub": "en",
             "name": "foobar4"
        }
    ]
}]

我正在尝试获取给定“SUB”的 ID 和名称列表。
所以,对于前一个对象,如果我发送 sub fr 我想得到:
[{
    "id": 1,
    "name": "foobar1"

}, 
{
    "id": 2,
    "name": "foobar3"
}]

你知道我是否可以用 lodash 轻松做到吗?

我尝试使用 _.pick但它不起作用(我对嵌套对象和数组之间的这些混合有点迷茫)_.map(data, function (o) { _.pick(o, ['id', 'values.name']) }); .

我也尝试使用 _.filter诸如 _.filter(data, { values: [{ sub: 'fr' }]});但它返回所有项目。我正在寻找的是仅返回嵌套部分。

最佳答案

您可以使用 flatMap()它的回调返回一个过滤后的数组 subs使用 filter()其中每个过滤的项目使用 map() 进行转换.

var result =  _.flatMap(data, item => 
  _(item.values)
    .filter({ sub: 'fr' })
    .map(v => ({id: item.id, name: v.name}))
    .value()
);

var data = [{
    "id": 1,
    "values": [
        {
            "sub": "fr",
            "name": "foobar1"
        }, 
        {
            "sub": "en",
            "name": "foobar2"
        }
    ]
}, 
{
    "id": 2,
    "values": [
        {
            "sub": "fr",
            "name": "foobar3"
        },
        {
            "sub": "en",
             "name": "foobar4"
        }
    ]
}];

var result =  _.flatMap(data, item => 
  _(item.values)
    .filter({ sub: 'fr' })
    .map(v => ({id: item.id, name: v.name}))
    .value()
);
           
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.12.0/lodash.js"></script>

关于lodash - 如何根据给定的条件从嵌套的对象数组中获取数组中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37319620/

相关文章:

javascript - 按数组内的嵌套对象属性排序

javascript - 使用 javascript/nodejs 分割 url 并存储在数组、对象或字符串中

javascript - LoDash - 如何通过公用 key 将一个集合值推送到另一个集合中

javascript - 如果对象与数组中的某个对象没有相同的键,则将其添加到数组中

javascript - Redux 状态正在随着 lodash 的 mergeWith 发生变化

javascript - Lodash isEqual 方法未给出预期结果

sequelize.js - Sequelize.Utils._?还是洛达什?

javascript - 有没有办法在 Lodash 或 Underscore 中为 null 指定默认值?

javascript - lodash 包含多个参数

javascript - lodash _.包含字符串中的多个值之一