排序 array
arr.sort([compareFunction])
如果 compareFunction
沒有被應用,元素將被轉換為 字串 並以 Unicode 編碼位置 進行比較來排序。
如果有 compareFunction
,這個比較函式會是以下形式:
function compare(a, b) {
if (在某排序標準下 a 應該在 b 之前) {
return -1;
}
if (在某排序標準下 a 應該在 b 之後) {
return 1;
}
// 兩者在相同位置,a 等於 b
return 0;
}
以某 array 的順序作為參照排序另一個 array
const TARGET_ORDER = ['ja', 'en', 'han'];
const sortArr = (langs) => {
const arraySort = langs; // 可要可不要,這裡不想改到原有 array 所以另外賦值處理
// 根據TARGET_ORDER的順序進行排序
arraySort.sort(function (second, first) {
// 後者作為第一個參數,前者作為第二個參數
// 如果 second 在 TARGET_ORDER 中的排序靠後,減掉 first 之後就會獲得正的值
// first 和 second 維持相同順序
return TARGET_ORDER.indexOf(second) - TARGET_ORDER.indexOf(first);
});
return arraySort;
};
console.log(sortArr(['en', 'han', 'ja']));
// ['ja', 'en', 'han'];
// 有重複的多項時也會以相同形式被進行處理
console.log(sortArr(['en', 'han', 'ja', 'en', 'en', 'ja']));
// [ 'ja', 'ja', 'en', 'en', 'en', 'han' ]