这个问题是特定于 lodash 的。
给定两个对象数组,最好的方法是使用其中一个数组中的对象来过滤另一个数组?我已经尝试过在下面提供的场景中使用两个.forEach
循环来完成此操作,但我想知道是否有更好的方法可以使用 lodash 来进行此类过滤。
示例
主要源对象数组是
users
。var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'joe', 'age': 40, 'active': false },
{ 'user': 'fred', 'age': 50, 'active': false },
{ 'user': 'fred', 'age': 60, 'active': false },
{ 'user': 'fred', 'age': 70, 'active': false },
{ 'user': 'fred', 'age': 22, 'active': false },
{ 'user': 'fred', 'age': 25, 'active': false },
{ 'user': 'barney', 'age': 40, 'active': false },
{ 'user': 'pebbles', 'age': 1, 'active': true }
];
将筛选users
数组的对象数组称为others
。
var others = [
{ 'user': 'fred', 'age': 60 },
{ 'user': 'fred', 'age': 70},
{ 'user': 'fred', 'age': 22}
];
基于对 others
进行筛选的期望结果是筛选出 users
:
[
{ 'user': 'fred', 'age': 60, 'active': false },
{ 'user': 'fred', 'age': 70, 'active': false },
{ 'user': 'fred', 'age': 22, 'active': false }
];
这里是获得所需结果的一种方法。
var result = [];
_.forEach(users, function (n, key) {
_.forEach(others, function (n2, key2) {
if (n.user === n2.user && n.age === n2.age) {
result.push(n);
}
});
});
console.log(result);
这里是在jsbin上的示例。
http://jsbin.com/hapariviya/1/edit?html,js,console,output
result.push(n)
后返回false;
,那么应该没问题。 - Cory Danielsonothers
,你会开始看到你和我的差异很大。但这是微不足道的。无论解决方案如何,所有这些都发生得非常快。必须平衡性能与清晰代码。通常情况下,清晰的代码更好,因为大多数性能问题都与DOM相关。 - Cory Danielson