iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0

嗨,大家好!我是 Eric。今天我們要探討一個很有趣的主題:字典順序。
不同於編碼順序,字典順序有它獨特的排序邏輯,接下來讓我們來看一個具體的例子。

台灣城市排序

假設我們有一組城市名稱陣列:

const names = ['台北市', '新北市', '桃園市'];

如果我們直接使用 JavaScript 的 .sort() 方法:

names.sort();
console.log(names);
// 輸出:['台北市', '新北市', '桃園市']

這裡的排序是按照字符的編碼順序進行的,但這並不是我們想要的字典順序。

編碼順序的局限性

編碼順序只考慮字符的編碼值,而不考慮語言或文化的排序規則。舉例來說:

console.log('新' > '桃');  // 輸出:false

對於 '新' > '桃',這個比較是基於 Unicode:

  • '新' 的 Unicode 編碼是 U+65B0(26032)
  • '桃' 的 Unicode 編碼是 U+6843(26691)

由於 26032 < 26691,所以 '新' > '桃' 返回 false。

使用 localeCompare

我們可以使用字符串的 localeCompare 方法來進行字典順序比較。

console.log('新'.localeCompare('桃')); // 輸出:1

這個方法會根據地區設定(locale)來比較字符串,並返回 -1、0 或 1,代表小於、等於或大於。

組合 sortlocaleCompare

結合 sort()localeCompare(),我們可以得到想要的排序結果。

names.sort((a, b) => a.localeCompare(b));
console.log(names); // 輸出:['台北市', '桃園市', '新北市']

結論

在多語言或特定文化背景下,單純依靠編碼順序來排序可能不會滿足需求,而 localeCompare 能考慮語言和地區的特性,還能與 sort() 方法結合,讓我們更靈活地進行排序。

那麼這次分享就到這邊啦~我們明天見~~

參考網站:https://medium.com/appxtech/localecompare-的用法-6be2ab8401ad


上一篇
Day13 - 超好用的Web API intersection Observer
下一篇
Day15 - Web Animation API
系列文
JavaScript 是什麼?可以吃嗎?20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言