Como encontrar duplicatas na matriz de pares de valores-chave Sails.js
-
20-12-2019 - |
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.
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.