簡體   English   中英

如何通過codePoint對JavaScript字符串進行排序?

[英]How do I sort JavaScript strings by codePoint?

我期待通過包含unicode字符的字符串字段對對象進行排序。 但是,我想按代碼點排序字符串,而不是按語言環境排序。 所以,這是一個例子,JavaScript對對象進行排序,以便\Ⓑb都被認為是相同的字符。

排序順序不正確:

> [{name: 'a'}, {name: 'b'}, {name: 'd'}, {name: '\u24B7'}].sort((a,b)=> a.name.localeCompare(b.name))
[ { name: 'a' }, { name: 'b' }, { name: 'Ⓑ' }, { name: 'd' } ]

但是,這不是我想要的。 我想要以下排序順序,它們被認為是不同的字符。 這是比較字符串且不包括比較器函數時的默認行為。

正確的排序順序(注意b\Ⓑ不再被認為是相同的排序字符):

> ['a','b','\u24B7','d'].sort()
[ 'a', 'b', 'd', 'Ⓑ' ]

在實際應用程序中,字符串將是多個字符,並且可能包含多個unicode字符,我們希望它們根據unicode編號(即代碼點)進行排序。

我的問題:是否有一種簡單的方法來按字符串的代碼點排序? 我寧願不為此重新實現自定義比較器。

我通常這樣做:

let cmp = (a, b) => a > b ? 1 : a < b ? -1 : 0;

objects.sort((a, b) => cmp(a.name, b.name));

更確切地說

let sortBy = (a, f) => a.sort((x, y) => cmp(f(x), f(y)));

sortBy(objects, x => x.name);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM