季節需要按以下順序排列:春季、夏季、秋季、冬季,每個季節都有 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)
uj5u.com熱心網友回復:
我將字串分成年份和季節,比較年份并比較同一年份的季節。我為訂單使用了一系列季節。
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);
uj5u.com熱心網友回復:
該解決方案基本上建立在您的建議之上。
首先,將值拆分為具有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))
uj5u.com熱心網友回復:
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://www.uj5u.com/net/482235.html
標籤:javascript 数组 排序
