对数据数组进行排序是应用程序中的一个日常用例。例如,你想按字母顺序显示一个名字列表,并允许用户将排序从升序切换到降序,反之亦然。
本教程告诉你如何在JavaScript中对字符串数组进行排序。
在JavaScript中对一个字符串数组进行排序
JavaScript自带的Array#sort 方法。这个sort 方法允许你提供一个比较器回调。比较器函数的返回值决定了排序的方式。
注意:JavaScript中的Array#sort 方法会突变数组。如果你想(或需要)保持你的数据的原始排序,请创建一个数组的副本。
使用排序String.localeCompare()
JavaScript字符串值实现 localeCompare方法。该方法返回一个数字,表示比较字符串在排序顺序中是否在前,在后,或者是相同的字符串值。
下面是一个使用重音、小写和大写对一个单词数组进行排序的例子:
['réservé', 'RESERVE'].sort((a, b) => {
return a.localeCompare(b)
})
// ['RESERVE', 'réservé']
你也可以传递一个引用 "locale "作为第二个参数,传递一个选项对象作为第三个参数:
['réservé', 'RESERVE'].sort((a, b) => {
return a.localeCompare(b, 'en', { sensitivity: 'base' })
})
// ['réservé', 'RESERVE']
配置选项允许你根据你的语言要求来控制排序。
以升序排序字符串
另一种对字符串值进行排序的方法是进行比较并返回所需的整数值。当升序排序时,你应该返回-1 ,告诉比较器第一个值在引用之前。
下面的例子使用了不区分大小写的排序,在比较之前先小写。使用小写字母比较可以保持字母顺序:
['marcus', 'Christian', 'Norman'].sort((a, b) => {
return a.toLowerCase() < b.toLowerCase()
? -1
: 1
})
// ['Christian', 'marcus', 'Norman']
当对给定的字符串值进行大小写敏感比较时,排序是不同的。
['marcus', 'Christian', 'Norman'].sort((a, b) => {
return a < b ? -1 : 1
})
// ['Christian', 'Norman', 'marcus']
以降序对字符串进行排序
你也可以对字符串数组进行降序排序,当第一个值应该在参考值之后时,返回一个1:
['Marcus', 'Christian', 'Norman'].sort((a, b) => {
return a.toLowerCase() < b.toLowerCase()
? 1
: -1
})
请享受对字符串数组的排序!