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

333
Views
(javascript) ¿Cómo ordenar una matriz de cadenas que tiene temporadas y años?

Las estaciones deben estar en este orden: Primavera, Verano, Otoño, Invierno y cada estación tiene el año 2025 y 2026.

Todos los 2025 necesitan estar juntos y todos los 2026 necesitan estar juntos (2025 y 2026 son solo ejemplos, los años pueden ser cualquier cosa: 1945, 3005, 7980, etc.).

por ejemplo:

 const seasonArr = ['Spring2026',' Spring2025','Summer2026','Summer2025','Fall2025','Fall2026','Winter2026','Winter2025'] let sortedArr = [] const someFunction = () => { ... } someFunction(seasonArr) // output: sortedArr = ['Spring2025', 'Summer2025', 'Fall2025', 'Winter2025', 'Spring2026', 'Summer2026', 'Fall2026', 'Winter2026']

Sé que probablemente tenga que comparar los años, pero como son cadenas, me cuesta comparar solo los números.

esto es algo que pensé:

 const seasonArr = ['Spring2026',' Spring2025','Summer2026','Summer2025','Fall2025','Fall2026','Winter2026','Winter2025'] let sortedArr = [] const someFunction = (seasonArr) => { for (const season of seasonArr) { let year = season.split(/([0-9]+)/) // unsure where to go from here } } someFunction(seasonArr)
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Divido las cadenas en año y temporada, comparo el año y comparo la temporada para los mismos años. Utilizo una variedad de temporadas para el orden.

 const seasonArr = ['Spring2026','Spring2025','Summer2026','Summer2025','Fall2025','Fall2026','Winter2026','Winter2025']; const seasons = ['Spring', 'Summer', 'Fall', 'Winter']; const regexp = /(.+)(\d{4})/; const someFunction = (s) => { return [...s].sort((lhs, rhs) => { const [seasonL, yearL] = regexp.exec(lhs).slice(1); const [seasonR, yearR] = regexp.exec(rhs).slice(1); return +yearL - +yearR || seasons.indexOf(seasonL) - seasons.indexOf(seasonR); }); } let sortedArr = someFunction(seasonArr); console.log(sortedArr);

Creo una copia superficial con

 [...s]

para mantener la matriz original sin cambios.

Misma lógica con mejor rendimiento para arreglos grandes

 const seasonArr = ['Spring2026','Spring2025','Summer2026','Summer2025','Fall2025','Fall2026','Winter2026','Winter2025']; const seasons = ['Spring', 'Summer', 'Fall', 'Winter']; const regexp = /(.+)(\d{4})/; const someFunction = (s) => { return s .map(el => { const [season, year] = regexp.exec(el).slice(1); return [season, year, seasons.indexOf(season[0])]; }) .sort((lhs, rhs) => { return +lhs[1] - +rhs[1] || lhs[2] - rhs[2]; }) .map(el => el[0] + el[1]); } let sortedArr = someFunction(seasonArr); console.log(sortedArr);

about 4 years ago · Juan Pablo Isaza Report

0

Esta solución se basa básicamente en lo que sugiere.

Primero, divida los valores en una matriz de objetos que tengan season y year . Luego ordenar por year y el índice de la temporada. Luego vuelva a juntar los valores.

 const seasonArr = ['Spring2026',' Spring2025','Summer2026','Summer2025','Fall2025','Fall2026','Winter2026','Winter2025'] const SEASONS = ["Spring", "Summer", "Fall", "Winter"] function comparator(a, b) { if (a.year == b.year) { const aSeasonIndex = SEASONS.indexOf(a.season) const bSeasonIndex = SEASONS.indexOf(b.season) return aSeasonIndex - bSeasonIndex; } return a.year - b.year; } function seasonYearToObject(obj) { const matches = obj.match(/([^\d]*)(\d+)/) if (matches) { return {season: matches[1], year: matches[2]} } } function objectToSeasonYear(obj) { return `${obj.season}${obj.year}` } function sortByYearAndSeason(arr) { return arr .map(entry => seasonYearToObject(entry)) .sort(comparator) .map(objectToSeasonYear); } console.log (sortByYearAndSeason(seasonArr))
about 4 years ago · Juan Pablo Isaza Report

0

Casi has terminado después de season.split(/([0-9]+)/) with String#split()

  • Simplemente haya creado seasonObj con el orden de clasificación deseado para todas las temporadas y combine Array#map() , Destructuring de asignación y Array#sort()

Código:

 const seasonArr = ['Spring2026', 'Spring2025', 'Summer2026', 'Summer2025', 'Fall2025', 'Fall2026', 'Winter2026', 'Winter2025'] const seasonObj = { Spring: 0, Summer: 1, Fall: 2, Winter: 3 } const result = seasonArr .map((season) => season.split(/([0-9]+)/)) .sort(([aSeason, aYear], [bSeason, bYear]) => +aYear - bYear || seasonObj[aSeason] - seasonObj[bSeason]) .map(([season, year]) => `${season}${year}`) 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!