Questa domanda è specifica per lodash.lodash: filtro array di oggetti con una diversa serie di oggetti
Dato due matrici di oggetti, qual è il modo migliore per filtrare un array con gli oggetti dell'altro array? Ho tentato di creare uno scenario qui sotto, e il modo in cui ho fatto questo è usare due loop .forEach
, ma mi piacerebbe sapere se usando lodash c'è un modo migliore per andare su questo tipo di filtro.
Esempio
La matrice principale fonte di oggetti è
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 }
];
La matrice di oggetti che filtri l'array users
è chiamato others
.
var others = [
{ 'user': 'fred', 'age': 60 },
{ 'user': 'fred', 'age': 70},
{ 'user': 'fred', 'age': 22}
];
Il risultato desiderato basato su others
filtraggio users
è:
[
{ 'user': 'fred', 'age': 60, 'active': false },
{ 'user': 'fred', 'age': 70, 'active': false },
{ 'user': 'fred', 'age': 22, 'active': false }
];
Ecco un modo per ottenere il risultato desiderato.
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);
Ecco l'esempio su jsbin.
http://jsbin.com/hapariviya/1/edit?html,js,console,output
si sta cercando di trovare i duplicati in base all'utente e l'età? –
@CoryDanielson - cercando di trovare le corrispondenze in base all'utente e alle proprietà dell'età. Lo definirei corrispondente, non duplicato. – mg1075
È interessante notare che la tua soluzione originale è di gran lunga la più veloce. Penso che potrebbe produrre duplicati se altri hanno duplicati, ma se restituite false; dopo aver eseguito 'result.push (n)' dovrebbe essere ok. –