Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

139
Vistas
Cómo usar un JS reduce para devolver una matriz sin duplicados cuando se usa también .split

Me gustaría entender cómo regresar de una matriz .reduce de elementos que no contienen duplicados.

La matriz que tengo es particular:

['JJ2AG-001099', 'JJ2AG-001999', 'JJ3AG-001999', 'JJ4AG-001999']

En detalles, la cadena dentro de la matriz está formada por 2 identificadores como ejemplo

  • JJ2AG -> esto identifica con que grupo de personas esta relacionada esa persona
  • 001099 -> esto identifica el id de esa persona

Entonces, lo que necesito inicialmente es dividir los elementos de la matriz sin tener el - por lo que el resultado será el siguiente:

[0: JJ2AG, 1: 001099]

Luego, debería verificar desde newArry si el 0 de cada elemento es único y, como resultado, debería tener solo una matriz:

['JJ2AG', 'JJ3AG', 'JJ4AG']

Entonces, esta última matriz contiene solo una vez la parte 0 de cada elemento como se describe arriba

Traté de usar reduce pero no puedo entender cómo tener esta nueva matriz y no puedo usar bucles como for y forEach según los requisitos que tengo, así que lo que he hecho hasta ahora en el fragmento pero no tengo idea de cómo crear una nueva matriz como necesito como

['JJ2AG', 'JJ3AG', 'JJ4AG']

 const ids = ['JJ2AG-001099', 'JJ2AG-001999', 'JJ3AG-001999', 'JJ4AG-001999']; const x = ids.reduce(( acc, item) => { console.log('ACC', acc); console.log('ITEM', item); const splited = item.split('-'); console.log(splited); const groupId = splited[0]; console.log(groupId); return acc.includes(groupId) ? [splited] : [...acc, item]; }, []); console.log(x)

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Como parece que estás en JavaScript moderno, puedes usar Set para esto:

 const ids = ['JJ2AG-001099', 'JJ2AG-001999', 'JJ3AG-001999', 'JJ4AG-001999']; const x = [...new Set(ids.map(id => id.split("-")[0]))] console.log(x)

El conjunto toma elementos únicos de una matriz, así que primero, asigne todos los identificadores a la primera parte de la cadena ( id.split("-")[0] ), conviértalo en un conjunto y, usando la extensión, vuelva a convertirlo en una matriz.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Solo cambia:

 return acc.includes(groupId) ? [splited] : [...acc, item];

A:

 return acc.includes(groupId) ? acc : [...acc, groupId];

Cada vez que se encuentra un duplicado, básicamente está eliminando las ID únicas anteriores y, en su lugar, devuelve el duplicado con [groupId] ; en su lugar, debe devolver los ID únicos sin cambios. También debe agregar a la matriz de ID únicos groupId not item . Vea la demostración a continuación:

 const ids = ['JJ2AG-001099', 'JJ2AG-001999', 'JJ3AG-001999', 'JJ4AG-001999']; const x = ids.reduce(( acc, item) => { //console.log('ACC', acc); //console.log('ITEM', item); const splited = item.split('-'); //console.log(splited); const groupId = splited[0]; //console.log(groupId); return acc.includes(groupId) ? acc : [...acc, groupId]; }, []); console.log(x)

QUE TAMBIÉN PUEDES ESCRIBIR COMO...

 const ids = ['JJ2AG-001099', 'JJ2AG-001999', 'JJ3AG-001999', 'JJ4AG-001999']; const x = ids.reduce( ( acc, item) => acc.includes(item.split('-')[0]) ? acc : [...acc, item.split('-')[0]] , [] ); console.log(x);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar un Set o puede usar un objeto simple y agregar claves según sea necesario. Este es un oneliner que usa reduce .

 Object.keys(ids.reduce((acc, current)=> { acc[current.split("-")[0]]=true; return acc}, {}))

Lo que hace es que agrega claves al objeto, si encuentra una clave existente, no importa. Al final necesitas las claves del acumulador y ahí es donde entra en juego Object.keys .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda