To pytanie jest specyficzne dla lodash.lodash: filtruj tablicę obiektów o innej tablicy obiektów.
Który z dwóch tablic obiektów jest najlepszy, aby filtrować jedną tablicę z obiektami innej macierzy? Próbowałem przedstawić poniżej scenariusz, a sposób, w jaki to zrobiłem, polega na użyciu dwóch pętli .forEach
, ale chciałbym się dowiedzieć, czy używanie LASA jest lepszym sposobem na obejście tego typu filtrowania.
Przykład
Głównym źródłem tablicy obiektów jest
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 }
];
Tablica obiektów filtruje tablicę users
nazywa others
.
var others = [
{ 'user': 'fred', 'age': 60 },
{ 'user': 'fred', 'age': 70},
{ 'user': 'fred', 'age': 22}
];
Pożądany wynik podstawie others
filtrowania users
jest:
[
{ 'user': 'fred', 'age': 60, 'active': false },
{ 'user': 'fred', 'age': 70, 'active': false },
{ 'user': 'fred', 'age': 22, 'active': false }
];
Tu jest jednym ze sposobów, aby uzyskać żądany wynik.
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);
Oto przykład na jsbin.
http://jsbin.com/hapariviya/1/edit?html,js,console,output
Starasz się znaleźć duplikaty w oparciu o użytkownika i wieku? –
@CoryDanielson - próba znalezienia dopasowań na podstawie właściwości użytkownika i wieku. Nazwałbym to dopasowywaniem, a nie duplikowaniem. – mg1075
Co ciekawe, twoje oryginalne rozwiązanie jest zdecydowanie najszybsze. Myślę, że mógłby produkować duplikaty, jeśli inni mają duplikaty, ale jeśli "zwrócisz false", po wykonaniu 'result.push (n)' powinno być w porządku. –