下划线有一些功能可以将嵌套的对象数组提取到新数组吗?

Underscore have some function to extract nested array of objects to new array?

我有:

[{
    "id": 1,
    "listForExtract": [{
        "value1": "1A",
        "value2": "2A"
    }, {
        "value1": "1B",
        "value2": "2B"
    }, ]
},
{
    "id": 2,
    "listForExtract": [{
        "value1": "1C",
        "value2": "2C"
    }, {
        "value1": "1D",
        "value2": "2D"
    }, ]
}]

我想将 listForExtract 中的对象提取到一个新数组中,例如使用一些传递 ID 的下划线函数:

类似于:_.extractNestedArrayFrom(myArray, 'listForExtract', {'id':2})

[{
    "value1": "1A",
    "value2": "2A"
}, {
    "value1": "1B",
    "value2": "2B"
}]

您可以组合 map and where 种方法

var myArray = [{
    "id": 1,
    "listForExtract": [{
        "value1": "1A",
        "value2": "2A"
    }, {
        "value1": "1B",
        "value2": "2B"
    }, ]
},
{
    "id": 2,
    "listForExtract": [{
        "value1": "1C",
        "value2": "2C"
    }, {
        "value1": "1D",
        "value2": "2D"
    }, ]
}];
var result = _.map(_.where(myArray, {
  'id': 2
}), function(elem) {
  return elem.listForExtract
});
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>

你甚至不需要 underscore

以下代码应该适合您。

myArray.filter(function(){
  return o.id==2
}).map(function(o){
  return o.listForExtract
});

您可以使用 where, pluck and flatten:

var result = _.chain(data)
    .where({id:2})
    .pluck('listForExtract')
    .flatten()
    .value()

Where 查找数组中 id 为 2 的所有项目,然后 pluck 提取 listForExtract。然后使用 Flatten 将结果展平为一个数组