¿Cómo crear una lista de elementos únicos en JavaScript?

En mi función de reducción CouchDB necesito reducir una lista de elementos a los únicos.

Nota: En ese caso, está bien tener una lista, será un número pequeño de elementos de tipo cadena.

Mi forma actual es establecer las claves de un objeto, luego devolver las claves de ese objeto ya que el lugar donde el código no puede usar cosas como _.uniq por ejemplo.

Me gustaría encontrar una forma más elegante de deletrear esto.

 function(keys, values, rereduce) { // values is a Array of Arrays values = Array.concat.apply(null, values); var uniq = {}; values.forEach(function(item) { uniq[item] = true; }); return Object.keys(uniq); } 

7 Solutions collect form web for “¿Cómo crear una lista de elementos únicos en JavaScript?”

Comúnmente, el enfoque que usaste es una buena idea. Pero podría proponer una solución que haga que el algoritmo sea mucho más rápido.

 function unique(arr) { var u = {}, a = []; for(var i = 0, l = arr.length; i < l; ++i){ if(!u.hasOwnProperty(arr[i])) { a.push(arr[i]); u[arr[i]] = 1; } } return a; } 

Como pueden ver, aquí solo tenemos un bucle.

He hecho un ejemplo que prueba tus soluciones y las mías. Intenta jugar con eso.

Una alternativa adecuada para listas pequeñas sería simular el enfoque de sort | uniq de la línea de comando de Unix sort | uniq sort | uniq :

  function unique(a) { return a.sort().filter(function(value, index, array) { return (index === 0) || (value !== array[index-1]); }); } 

Esta función ordena el argumento y luego filtra el resultado para omitir cualquier elemento que sea igual a su predecesor.

El enfoque basado en claves está bien y tendrá mejores características de rendimiento para grandes cantidades de elementos (O (n) para insertar n elementos en una tabla hash, en comparación con O (n log n) para clasificar la matriz). Sin embargo, es poco probable que esto se note en pequeñas listas. Además, con esta versión podría modificarla para usar una función de clasificación o igualdad diferente si fuera necesario; con las claves hash estás atascado con la noción de igualdad de claves de JavaScripts

El mejor método parece estar usando ES6 y Set. Línea única y más rápida * que la anterior según el violín.

 const myList = [1,4,5,1,2,4,5,6,7]; const unique = [...new Set(myList)]; console.log(unique); 

Esto debería funcionar con cualquier cosa, no solo con cadenas:

 export const getUniqueList = (a: Array) : Array => { const set = new Set(); for(let v of a){ set.add(v); } return Array.from(set); }; 

Lo anterior solo se puede reducir a:

 export const getUniqueValues = (a: Array) => { return Array.from(new Set(a)); }; 

🙂

Esta es una vieja pregunta, lo sé. Sin embargo, se encuentra en la parte superior de algunas búsquedas en Google, así que quise agregar que puede combinar las respuestas de @RobHague y @EugeneNaydenov utilizando lo siguiente:

 function unique(arr) { const u = {}; return arr.filter((v) => { return u[v] = !u.hasOwnProperty(v); }); }; 

También puede ignorar valores no definidos (a menudo útil) agregando:

 function unique(arr) { const u = {}; return arr.filter((v) => { return u[v] = (v !== undefined && !u.hasOwnProperty(v)); }); }; 

Puedes jugar con esta solución aquí: https://jsfiddle.net/s8d14v5n/

El uso de Object.keys te dará cadenas si pones en argumentos enteros (uniq ([1,2,3]) => [‘1’, ‘2’, ‘3’]. Aquí hay uno con Array.reduce:

 function uniq(list) { return list.reduce((acc, d) => acc.includes(d) ? acc : acc.concat(d), []); } 

qué pasa

  function unique(list) { for (i = 0; i 
  • Solo puedo devolver 1 matriz
  • Ejercicio de Javascript - Reverse 2 dimensional array
  • Filtrar matriz de objects en el valor de todas las properties
  • Evaluar cadena como Objeto sin eval () dinámicamente?
  • ¿Es posible crear una matriz de longitud fija en javascript?
  • .concat (, "z") -> Cómo get , "z"] en lugar de ?
  • cómo escribir una function para cambio sin empalme
  • Array "mapeo"
  • Aplanamiento de matriz anidada en JavaScript
  • Unirse a la matriz de startIndex a endIndex
  • Desempaquetado de matriz en variables separadas en JavaScript
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.