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

214
Vistas
Dividir una cadena en una matriz según el primero y el último

Tengo esta matriz: -

var a = ['DL1,C1,C5,C6','M4,DL3-7,B1-5']

Y quiero dividirlos como

[DL1,C1,C5,C6,M4,DL3,DL4,DL5,DL6,DL7,B1,B2,B3,B4,B5]

Para que DL3-7 o DL3-DL7 este Split DL3,DL4,DL5,DL6,DL7

La razón por la que estoy haciendo esto es porque quiero bloquear la entrada duplicada como DL3 no debería venir en ningún otro lado, estoy tratando de que los bucles hagan esto, solo quiero saber si hay alguna forma más simple de hacerlo y verificar si hay duplicación. después.

Gracias

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

0

Tienes que dividir tus problemas en tres partes:

  1. obtener valores delimitados por comas en diferentes elementos de matriz
  2. resolviendo "DL3-7" a "DL3", "DL4"...
  3. eliminando duplicados

Una vez que analiza el problema, es mucho más fácil manejarlos uno por uno. El código es bastante legible, avíseme si hay algo difícil de entender.

 const a = ['DL1,C1,C5,C6', 'M4,DL3-7,B1-5'] //this will split all comma delimited values const commaDelimit = a.map(item => item.split(',')).flat(); console.log("Separate values by comma: ") console.log(commaDelimit); //this will turn the ranges into individual items //this does not account for if the number is bigger than 9. //you can try doing this part yourself if you need to, should be a good learning exercise. const resolveRange = commaDelimit.map(item => { if (item.includes('-')) { const pos = item.indexOf('-'); const beginning = Number(item.charAt(pos - 1)); const end = Number(item.charAt(pos + 1)) + 1; const toReturn = []; const prependString = item.substring(0, pos - 1); for (let i = beginning; i < end; i++) { toReturn.push(`${prependString}${i}`) } return toReturn; } return item; }).flat(); console.log("Change 'DL3-7' to DL3, DL4 and so on: ") console.log(resolveRange); //this will get rid of duplicates const uniques = [...new Set(resolveRange)]; console.log("Remove duplicates: ") console.log(uniques);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Cree una matriz con esa longitud, itere y transforme, acabo de escribir la parte más desafiante:

 function splitRange(range) { let a = range.split('-'); if (a.length < 2) return [range]; const baseString = (a[0].match(/[az AZ]/g))?.join(''); const baseNumber = +((a[0].match(/\d+/))?.shift()); return Array.from({length: +a.pop().match(/\d+/) - baseNumber + 1}).map((_,i)=>`${baseString}${i+baseNumber}`); } const s='DL1,C1,C5,C6,M4,DL3-7,B1-5'; console.log( s.split(',').map(item=>splitRange(item)).flat() );

about 4 years ago · Juan Pablo Isaza Denunciar

0

Básicamente, @cSharp ha explicado el concepto de transformación de datos al resultado deseado.

  1. Dividir por coma.

  2. Trabaje con expresiones regulares para transformar el valor del rango y agregarlo a la matriz. Patrón Regex y datos de prueba

  3. Distinguir el valor de la matriz.

 var a = [' DL1,C1,C5,C6','M4,DL3-7,B1-5']; var formatteds = a.reduce((previous, current) => { var splits = current.trim().split(','); var rangedSplits = splits.reduce((prev, cur) => { var pattern = new RegExp(/([AZ]*)(\d)-[AZ]*(\d)/); var match = pattern.exec(cur); if (match) { // Pattern 1: ['DL3-7', 'DL', '3', '7'] // Pattern 2: ['DL3-DL7', 'DL', '3', '7'] var startIndex = parseInt(match[2].toString()); var endIndex = parseInt(match[3].toString()); var arr = []; for (let i = startIndex; i <= endIndex; i++) { arr.push(match[1].toString() + i); } prev = prev.concat(arr); } else { prev = prev.concat([cur]); } return prev; }, []); previous = previous.concat(rangedSplits); return previous; }, []); var result = formatteds.filter((x, i, array) => array.indexOf(x) === i); console.log(result);

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