Necesito comprobar un array de JavaScript para ver si hay valores duplicados. ¿Cuál es la forma más sencilla de hacerlo? Sólo necesito encontrar los valores duplicados, no necesito sus índices ni el número de veces que están duplicados.
Sé que puedo hacer un bucle a través de la matriz y comprobar todos los demás valores en busca de una coincidencia, pero parece que debería haber una manera más fácil.
Podrías ordenar el array y luego recorrerlo para ver si el índice siguiente (o anterior) es el mismo que el actual. Asumiendo que tu algoritmo de ordenación es bueno, esto debería ser menos de O(n2):
begin snippet: js hide: false console: true babel: false -->
var arr = [9, 9, 111, 2, 3, 4, 4, 5, 7];
var sorted_arr = arr.slice().sort(); // You can define the comparing function here.
// JS by default uses a crappy string compare.
// (we use slice to clone the array so the
// original array won't be modified)
var results = [];
for (var i = 0; i < sorted_arr.length - 1; i++) {
if (sorted_arr[i + 1] == sorted_arr[i]) {
results.push(sorted_arr[i]);
}
}
console.log(results);
Por si acaso, si se va a devolver como una función para los duplicados. Esto es para un tipo de caso similar.
Referencia: https://stackoverflow.com/a/57532964/8119511
Puedes añadir esta función, o modificarla y añadirla al prototipo Array de Javascript':
Array.prototype.unique = function () {
var r = new Array();
o:for(var i = 0, n = this.length; i < n; i++)
{
for(var x = 0, y = r.length; x < y; x++)
{
if(r[x]==this[i])
{
alert('this is a DUPE!');
continue o;
}
}
r[r.length] = this[i];
}
return r;
}
var arr = [1,2,2,3,3,4,5,6,2,3,7,8,5,9];
var unique = arr.unique();
alert(unique);