使用Lodash在[]数组

时间:2016-10-12 16:32:01

标签: javascript arrays json lodash vuejs2

我有一个看起来像这样的数组。

Users : {
  0 : { BidderBadge: "somestuff", Bidders: 6, }
  1 : { BidderBadge: "somemorestuff", Bidders: 7,}
}

我想使用lodash搜索数组,以在每个用户对象中找到一个值。

具体来说,我想使用来自另一个相似对象数组的值来查找值。

var bidArray = [];
    _.each(this.vue.AllUsers, function(user) {
      _.each(this.vue.Bids, function(bid) {
        if(user.BidderBadge == bid.Badge) {   
          bidArray.push(user);
        }
      });
    });

这就是我所拥有的并且它有效,但我想只用一个循环代替两个循环。我想使用像_.indexOf这样的东西。这可能吗?

2 个答案:

答案 0 :(得分:3)

如果你想避免嵌套,你只需稍微修改Azamantes的解决方案

var bidders = this.vue.Bids.reduce(function(acc, bid) {
    return acc[bid.BidderBadge] = true;
}, {});
var bidArray = this.vue.AllBidders.filter(function(bidder) {
    return !!bidders[bidder.Badge];
});

答案 1 :(得分:1)

很难通过与您提供的输入不一致的示例给出准确答案。

无论如何,假设您的数据结构或多或少与此类似,您可以使用lodash _.intersectionWith来解决问题。

使用检查正确对象属性的比较器来交叉两个数组。此外,考虑到由于您对其价值感兴趣,用户必须首先进入交叉路口。

function comparator(user, bid) {
  return user.BidderBadge === bid.Badge;
}
console.log(_.intersectionWith(users, bids, comparator));

这是fiddle