En Javascript, estoy probando dos matrices para verificar si hay duplicados. Encontré una manera simple y agradable de hacer esto en ES6

function hasDuplicates(MyArray) {
    return new Set(MyArray).size !== MyArray.length;
      }

Sin embargo, quiero que ignore los valores vacíos en la matriz, ya que cuenta los valores vacíos como un duplicado.

Mi matriz se ve así: ["nombre 0", "nombre", "nombre 2", "", ""]

¿Cómo puedo hacer esto?

1
jenryb 19 feb. 2018 a las 11:49

2 respuestas

La mejor respuesta

Simplemente agregue esta línea antes de la declaración return

var tmpArray = MyArray.filter( s => (s || !isNaN(s)) && String(s).length > 0 );

Y usa esta matriz en la declaración de devolución

return new Set( tmpArray ).size !== tmpArray.length;

O simplemente extienda la misma línea para verificar si hay duplicados

return MyArray.filter( ( s, i, arr ) => 
         (s || !isNaN(s)) && String(s).length > 0 
           && arr.indexOf( s, i + 1 ) != -1 ).length > 0; 

Esto devolverá true si hay duplicados.

2
gurvinder372 19 feb. 2018 a las 08:58

Si desea devolver la matriz duplicada como resultado, esta es mi solución a su problema:

let data = ["101", "", "", "666"];
let compData = ["", "", "666", "101"];
var result = data.filter((value) => {
    if(value !="" && compData.indexOf(value) > -1)
        return value;
})   

Salidas:

["101", "666"]
0
Oskar Andersson 19 feb. 2018 a las 09:27