想問一下,在實現中文排序時,為什麼陣列排序可以正常,但到了物件以後就會錯誤?
下面程式碼是個範例
const arr = ['第四冊', '第一冊', '第二冊', '第三冊', '首冊', '總複習']
const arr2 = [
{
title: '第四冊'
},
{
title: '第ㄧ冊'
},
{
title: '第二冊'
},
{
title: '第三冊'
},
{
title: '首冊'
},
{
title: '總複習'
},
]
const test = arr.sort((a, b)=> a?.localeCompare(b))
const test2 = arr2.sort((a, b)=> a.title?.localeCompare(b.title))
console.log(test, 'test')
console.log(test2, 'test2')
test 會是正常:
["首冊", "第一冊", "第二冊", "第三冊", "第四冊", "總複習"]
test2 卻呈現不規則的情況:
[
{ title: "首冊" },
{ title: "第二冊" },
{ title: "第三冊" },
{ title: "第四冊" },
{ title: "第ㄧ冊" },
{ title: "總複習" }
]
請問為什麼會這樣,又該如何解決?
目前看來,二個排序是正確的。
我猜測你會認為不正確的原因是因為「第ㄧ冊」
在文字序列上。「ㄧ」這個文字是在「一二三...」的後面沒錯。
你要注意你第二個的「ㄧ」並不是「一」。
(您可以用內碼表轉換數值查看就知道)
所以就這兩個排序而言。並無任何不規則。而是照著規則排序的。