使用lodash过滤数据

时间:2015-06-02 16:26:13

标签: javascript lodash

目标是在“allInvoices”数组中查找“selectedIds”数组中具有相应invoiceId的所有对象。

我目前正在使用lodash并实现如下。我想知道是否有更优雅的方法使用lodash,链接或其他任何方式执行此任务。

var selectedIds = [
  { invoiceId: 2, customerId: 34 },
  { invoiceId: 4, customerId: 49}
  ];

var allInvoices = [
  {
    id: 2,
    name: 'Ron',
    date: '2015-14-12'
  },
  {
    id: 3,
    name: 'Harry'
  },
  {
    id:4,
    name: 'snowpiercer'
  },
  {
    id:5,
    name: 'birdman'
  },
  {
    id:6,
    name: 'superman'
  }
  ];

  var  result = [];

  _.forEach(selectedIds, function(myId) {

    var eachInvoice = _.find(allInvoices,{id: myId.invoiceId});
    result.push(eachInvoice);

  });

  console.log(result);

http://plnkr.co/edit/btB3aEwPDotao9kMtgFm?p=info

2 个答案:

答案 0 :(得分:1)

这是另一种方法:

_(allInvoices)
    .groupBy('id')
    .at(_.pluck(selectedIds, 'invoiceId'))
    .flatten()
    .value()
  • groupBy()创建一个以ID为键的对象
  • at()创建一个数组,在特定键
  • 中选择值
  • flatten()删除数组嵌套

答案 1 :(得分:0)

它不够整洁;但这会保存任何嵌套循环(由_.find引起):

var pluckedIds = _.pluck( selectedIds, "invoiceId" ); // [2,4]

var result = _.filter( allInvoices, function ( invoice ) {
  return pluckedIds.indexOf( invoice.id ) !== -1;
});