Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

220
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!