Digamos que tenemos una matriz como esta
const array = ['bic ycle drive', 'bici ycl frei', 'bicyc le dri ve', 'manace', 'bicycle drive', 'bicycle drive'] Quiero que regrese ['bic ycle drive', 'bici ycl frei', 'manace'] porque bic ycle drive, bicyc le dri ve, bicycle drive, bicycle drive son la misma oración con espacios en blanco en diferentes lugares.
Resumen: solo devuelva valores únicos, el espacio en blanco no es importante.
PD: Podemos elegir cualquiera de los duplicados.
Gracias.
Desde ES6, es fácil crear matrices de valores únicos usando un Conjunto, pero en este caso necesita transformar las cadenas (eliminar espacios) para encontrar los duplicados, pero aún conserva las cadenas originales, para que pueda devolverlas. Puede hacerlo creando un Mapa con la "cadena sin espacio" como clave y la cadena original como valor. Dado que las claves de Map son únicas.
Cree un mapa usando Array.map() para generar una matriz de [string without spaces, string] . Luego, vuelva a convertir el iterador Map.values() en una matriz. Esto devolverá el último elemento de cada serie de duplicados.
const array = ['bic ycle drive', 'bici ycl frei', 'bicyc le dri ve', 'manace', 'bicycle drive', 'bicycle drive'] const result = [...new Map( array.map(str => [str.replace(/\s+/g, ''), str]) ).values()] console.log(result) Si desea el primer elemento de una serie de duplicados, puede usar Array.reduce() para crear el Mapa y solo asignar claves si aún no existen:
const array = ['bic ycle drive', 'bici ycl frei', 'bicyc le dri ve', 'manace', 'bicycle drive', 'bicycle drive'] const result = [...array.reduce((acc, str) => { const key = str.replace(/\s+/g, '') return acc.has(key) ? acc : acc.set(key, str) }, new Map()).values()] console.log(result)