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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top