在JavaScript、TypeScript或Node.js中对字符串阵列进行排序

1,476 阅读2分钟

对数据数组进行排序是应用程序中的一个日常用例。例如,你想按字母顺序显示一个名字列表,并允许用户将排序从升序切换到降序,反之亦然。

本教程告诉你如何在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
})

请享受对字符串数组的排序!