Javascript sort()
特性
1. 原地算法 in place -> 會覆蓋掉原輸入值
資訊
在 ECMAScript 2023 提出了 toSorted(),不確定是否已經是 release stable。作用跟 sort 一樣用來排序,差別在於會回傳一個新的 Array。語法基本上與 sort 的使用沒區別,之後會再補充 toSorted 的理解。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSorted
2. 預設的排序順序是根據字串的 Unicode 編碼位置(code points)而定。
3. 排序出的結果為 unstable 不穩定的
資訊
sort 在 ECMAScript 2019(也稱為 ES10)前是不穩定,也就是 compare = 0 時,仍有可能 順序改變,但在 ES10 後,則是穩定不變的。
也得看瀏覽器的版本是否支援 ES10,總之,在目前的瀏覽器環境多元宇宙下,建議還是把排序比較的定義函式寫得更為細節。
https://exploringjs.com/es2018-es2019/ch_array-prototype-sort-stable.html
let people = [
{ firstName: "John", lastName: "Doe" },
{ firstName: "Jane", lastName: "Doe" },
{ firstName: "Alice", lastName: "Smith" },
{ firstName: "Bob", lastName: "Smith" }
];
例如 John 跟 Jane 的 lastName 都是 Doe,在排序時會拿到 compare = 0,也就是照理說不應該變動順序。
但在不穩定的排序算法中,是有可能變成 Jane 在 John 之前的。