Этот вопрос относится к 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