跳至主要内容

排序 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' ]