季节应该是这样的:春天,夏天,秋天,冬天,每一个季节都有2025年和2026年。
2025年的一切都需要彼此在一起,2026年的一切都需要在一起(2025年和2026年只是一个例子:1945年、3005、7980等等)。
例如:
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']我知道我可能需要比较这些年,但因为它们是字符串,所以我很难仅仅比较数字。
这是我想过的:
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)发布于 2022-05-22 22:24:54
我把琴弦分成年份和季节,比较一年,比较同一年份的季节。我用了一系列的季节来订购。
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);
我创建一个浅拷贝
[...s]若要保持原始数组不变,请执行以下操作。
具有更好的大数组性能的相同逻辑
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);
发布于 2022-05-22 22:25:54
这个解决方案基本上建立在你建议的基础上。
首先,将值拆分为具有season和year的对象数组。然后根据year和季节指数进行排序。然后把这些值重新组合起来。
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))发布于 2022-05-23 03:46:31
在使用season.split(/([0-9]+)/)和String#split()之后,您几乎完成了
seasonObj,并将Array#map()、解构分配和Array#sort()组合起来代码:
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)
https://stackoverflow.com/questions/72341613
复制相似问题