Pergunta

Eu tenho uma matriz como abaixo.

[emails] => Array (
   [0] => Array (
      [a] => a@a.com
      [is_verified_a] => 1
    )
   [1] => Array (
      [b] => a@a.com
      [is_verified_b] => 1
   )
),

Preciso encontrar duplicatas neste array, mas as chaves são diferentes, ou seja, aeb têm o mesmo email 'a@a.com'.

ou seja, é necessário verificar se há duplicatas nesta matriz e precisar apenas do valor 'a@a.com' em uma variável separada.Existe alguma maneira de descobrir usando _.uniq ou qualquer outra função de sublinhado?

Por favor ajude. Muito obrigado.

Foi útil?

Solução

O que você quer fazer não está claro.No entanto, como você está usando JavaScript, seu array deve ficar assim:

var emails = [
    {
        email: "a@a.com",
        verified: true,
        key: "a"
    },
    {
        email: "a@a.com",
        verified: true,
        key: "b"
    }
];

Não faz sentido codificar chaves em seus objetos separadamente (especialmente em nomes de propriedades).

Para remover duplicatas de um array, podemos criar um genérico removeDuplicatesBy função:

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;
}

Agora podemos remover duplicatas no emails matriz da seguinte forma:

var uniqueEmails = removeDuplicatesBy(function (a, b) {
    return a.email === b.email && a.verified === b.verified;
}, emails);

Se você precisa manter chaves em seus objetos, provavelmente está fazendo algo errado.Você deve considerar reestruturar seu código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top