一、JS中文排序原理
JS中文排序是通過比較中文字符的Unicode編碼實現的,每個中文字符在Unicode編碼中都有對應的整數碼位。當比較兩個中文字符時,JS會將其碼位轉換成16進制數,並將其進行比較,碼位小的字符排在前面。
代碼示例:
function compare(a, b){ return a.localeCompare(b); } const arr = ["張三", "李四", "王五"]; arr.sort(compare); // ["李四", "王五", "張三"]
二、JS中文首字母排序
在實際開發中,經常需要將中文按照首字母排序,可以通過將中文字符串轉換成拼音,並對拼音進行排序來實現。
代碼示例:
import pinyin from 'pinyin'; function compare(a, b){ return pinyin(a)[0][0].localeCompare(pinyin(b)[0][0]); } const arr = ["李四", "張三", "王五"]; arr.sort(compare); // ["李四", "王五", "張三"]
三、JS中文排序根據碼值
除了比較中文字符的Unicode編碼外,也可以直接比較中文字符的碼值。中文字符的碼值都大於127,因此我們可以將中文字符轉換成對應的碼值來實現排序。
代碼示例:
function compare(a, b) { let tempa = ''; let tempb = ''; for (let i = 0; i < a.length; i++) { tempa += a.charCodeAt(i); } for (let i = 0; i < b.length; i++) { tempb += b.charCodeAt(i); } return tempa - tempb; } const arr = ["張三", "李四", "王五"]; arr.sort(compare); // ["李四", "張三", "王五"]
四、JS map排序
除了使用sort排序外,還可以使用map來實現中文排序。map是JavaScript中的一種數據結構,可以在插入和刪除數據時保持數據的有序性。
代碼示例:
const map = new Map([ ["張三", 1], ["李四", 2], ["王五", 3] ]); const sortedMap = new Map([...map.entries()].sort()); console.log(sortedMap); // Map(3) {"李四" => 2, "王五" => 3, "張三" => 1}
五、JS的sort排序方法
JS中的sort方法可以對數組中的元素進行排序,如果不傳入比較函數,sort會默認將元素轉換成字符串並按照Unicode編碼值進行排序。
代碼示例:
const arr = ["c", "b", "a", "張三", "李四", "王五"]; arr.sort(); // ["a", "b", "c", "李四", "王五", "張三"]
六、原聲JS按照a到z中文排序
可以使用Intl.Collator構造函數進行排序,可以指定sort選項為”zh”,表示按照中文進行排序,也可以選項為”en”,表示按照英文進行排序。
代碼示例:
const arr = ["c", "b", "a", "張三", "李四", "王五"]; const collator = new Intl.Collator('zh'); arr.sort(collator.compare); // ["a", "b", "c", "李四", "王五", "張三"]
七、JS選擇排序
選擇排序是一種簡單的排序算法,每次選擇最小的元素放在最前面,然後再從剩餘的元素中選擇最小的元素放在已排序的元素後面,重複這個過程,直到全部元素都排好序。
代碼示例:
function selectionSort(arr) { let n = arr.length; for (let i = 0; i < n - 1; i++) { let minIndex = i; for (let j = i + 1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } let temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } return arr; } const arr = ["c", "b", "a", "張三", "李四", "王五"]; selectionSort(arr); // ["a", "b", "c", "李四", "王五", "張三"]
八、JS歸併排序
歸併排序是一種分治的排序算法,將一個大問題分解為若干個小問題,分別求解,然後將它們的解組合起來,得到大問題的解。歸併排序的核心是將兩個有序的數組合併成一個有序的數組。
代碼示例:
function mergeSort(arr) { // 將數組拆分成兩個子數組 function merge(arr, left, right) { let result = [], il = 0, ir = 0; while (il < left.length && ir < right.length) { if (left[il] < right[ir]) { result.push(left[il++]); } else { result.push(right[ir++]); } } return result.concat(left.slice(il)).concat(right.slice(ir)); } function mergeSort1(items) { if (items.length < 2) { return items; } let middle = Math.floor(items.length / 2), left = items.slice(0, middle), right = items.slice(middle); return merge(mergeSort1(left), mergeSort1(right)); } return mergeSort1(arr); } const arr = ["c", "b", "a", "張三", "李四", "王五"]; mergeSort(arr); // ["a", "b", "c", "李四", "王五", "張三"]
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/231970.html