Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

334
Visualizações
(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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda