我有一个看起来像这样的数组。
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这样的东西。这可能吗?
答案 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。