首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(javascript)如何对具有季节和年份的字符串数组进行排序?

(javascript)如何对具有季节和年份的字符串数组进行排序?
EN

Stack Overflow用户
提问于 2022-05-22 22:09:22
回答 3查看 64关注 0票数 0

季节应该是这样的:春天,夏天,秋天,冬天,每一个季节都有2025年和2026年。

2025年的一切都需要彼此在一起,2026年的一切都需要在一起(2025年和2026年只是一个例子:1945年、3005、7980等等)。

例如:

代码语言:javascript
复制
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']

我知道我可能需要比较这些年,但因为它们是字符串,所以我很难仅仅比较数字。

这是我想过的:

代码语言:javascript
复制
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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-05-22 22:24:54

我把琴弦分成年份和季节,比较一年,比较同一年份的季节。我用了一系列的季节来订购。

代码语言:javascript
复制
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);

我创建一个浅拷贝

代码语言:javascript
复制
[...s]

若要保持原始数组不变,请执行以下操作。

具有更好的大数组性能的相同逻辑

代码语言:javascript
复制
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);

票数 3
EN

Stack Overflow用户

发布于 2022-05-22 22:25:54

这个解决方案基本上建立在你建议的基础上。

首先,将值拆分为具有seasonyear的对象数组。然后根据year和季节指数进行排序。然后把这些值重新组合起来。

代码语言:javascript
复制
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))
票数 1
EN

Stack Overflow用户

发布于 2022-05-23 03:46:31

在使用season.split(/([0-9]+)/)String#split()之后,您几乎完成了

代码:

代码语言:javascript
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72341613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档