需要以下情況的幫助
000-2022, 000-2023, 005-2021, 000-2021, 003-2021, 004-2022, 007-2021
最后 4 位數字是年份,中間 3 位數字是優先級編號。我需要首先將其與最高年份進行排序,低于它應該是該年份的相應優先級編號,然后它應該轉到下一個較小的年份。
預期結果 :
000-2023, 000-2022, 004-2022, 000-2021, 003-2021, 005-2021, 007-2021
uj5u.com熱心網友回復:
這邊走
let arr = ['000-2022', '000-2023', '005-2021', '000-2021', '003-2021', '004-2022', '007-2021']
arr.sort( (a,b)=>
{
let [aN,aY] = a.split('-').map(Number)
, [bN,bY] = b.split('-').map(Number)
return aY - bY || aN - bN
})
console.log( arr )
.as-console-wrapper {max-height: 100%!important;top:0 }
uj5u.com熱心網友回復:
使用sort()排序功能。并使用該split()函式拆分字串。
let arr = ["000-2022", "000-2023", "005-2021", "000-2021", "003-2021", "004-2022", "007-2021"]
arr.sort((a,b)=>{
let [aPriority,aYear] = a.split("-").map(it => Number(it));
let [bPriority,bYear] = b.split("-").map(it => Number(it));
return bYear > aYear ? 1 :
aYear > bYear ? -1 :
(aPriority - bPriority);
});
console.log(arr);
uj5u.com熱心網友回復:
只需使用普通的排序功能
const data = ['000-2022', '000-2023', '005-2021', '000-2021', '003-2021', '004-2022', '007-2021']
const result = data.sort((item1, item2)=> {
const [prior1, year1] = item1.split('-').map(Number);
const [prior2, year2] = item2.split('-').map(Number);
const yearRes = year2 - year1;
return (yearRes === 0)
? prior1 - prior2
: yearRes
})
console.log(result)
.as-console-wrapper{min-height: 100%!important; top: 0}
uj5u.com熱心網友回復:
我強烈建議首先將輸入資料清理為結構化格式。那么排序代碼會更容易理解。
這是一個例子:
a = ["000-2022", "000-2023", "005-2021", "000-2021", "003-2021", "004-2022", "007-2021"]
structured = a.map((e) => {
[priority, year] = e.split("-")
return {priority, year}
})
// `sort()` changes the array in place, so there's no need for a new var
structured.sort((e1, e2) => {
if (e1.year !== e2.year) {
// year is different, so sort by that first
return e1.year < e2.year && 1 || -1
} else {
// if year is the same, sort by priority
return e1.priority < e2.priority && 1 || -1
}
})
console.log(structured)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/407185.html
標籤:
