Cómo encontrar duplicados en la matriz de pares clave-valor Sails.js
-
20-12-2019 - |
Pregunta
Tengo una matriz como la siguiente.
[emails] => Array (
[0] => Array (
[a] => a@a.com
[is_verified_a] => 1
)
[1] => Array (
[b] => a@a.com
[is_verified_b] => 1
)
),
Necesito encontrar duplicados en esta matriz, pero las claves son diferentes, es decir, a y b tienen el mismo correo electrónico 'a@a.com'.
es decir, debe buscar duplicados en esta matriz y solo necesita el valor 'a@a.com' en una variable separada.¿Hay alguna forma de saberlo usando _.uniq o cualquier otra función de guión bajo?
Por favor ayuda. Muchas gracias.
Solución
Lo que quieres hacer no está claro.Sin embargo, dado que estás usando JavaScript, tu matriz debería verse así:
var emails = [
{
email: "a@a.com",
verified: true,
key: "a"
},
{
email: "a@a.com",
verified: true,
key: "b"
}
];
No tiene sentido codificar claves en sus objetos por separado (especialmente en los nombres de propiedades).
Para eliminar duplicados de una matriz podemos crear un genérico removeDuplicatesBy
función:
function removeDuplicatesBy(comparator, array) {
var length = array.length;
var unique = [];
for (var i = 0; i < length; i++) {
var element = array[i];
var isUnique = true;
for (var j = 0; j < i; j++) {
if (comparator(element, array[j])) {
isUnique = false;
break;
}
}
if (isUnique) unique.push(element);
}
return unique;
}
Ahora podemos eliminar duplicados en el emails
matriz de la siguiente manera:
var uniqueEmails = removeDuplicatesBy(function (a, b) {
return a.email === b.email && a.verified === b.verified;
}, emails);
Si necesita mantener claves en sus objetos, probablemente esté haciendo algo mal.Deberías considerar reestructurar tu código.