JavaScript 按字母顺序排列对象数组

Ammar Ali 2023年10月12日
  1. 使用 JavaScript 中的 if 条件和 sort() 函数按字母顺序对对象数组进行排序
  2. 使用 JavaScript 中的 localeCompare()sort() 函数按字母顺序对对象数组进行排序
  3. 使用 JavaScript 中的 Collator()sort() 函数按字母顺序对对象数组进行排序
JavaScript 按字母顺序排列对象数组

本教程将讨论使用 JavaScript 中的 sort() 函数按字母顺序排列对象数组。

使用 JavaScript 中的 if 条件和 sort() 函数按字母顺序对对象数组进行排序

如果我们有一个字符串或整数数组,我们可以使用 JavaScript 中的 sort() 函数轻松地对它们进行排序。例如,让我们使用 sort() 函数按字母顺序对字符串数组进行排序。请参考下面的代码。

var a = ['banana', 'apple', 'orange'];
var m = a.sort();
console.log(m);

输出:

Array(3)
0: "apple"
1: "banana"
2: "orange"
length: 3

如你所见,数组按字母顺序排序,结果保存在变量 m 中。如果我们有一个对象数组,在使用 sort() 函数对数组进行排序之前,我们必须使用一些条件。例如,如果我们有一个包含某些人的名字和姓氏的对象数组,我们想根据这些人的姓氏对数组进行排序。我们必须在 sort() 函数内部传递一个函数,它将比较每个人的姓氏,如果第一人的姓氏小于第二人的姓氏,则该函数将返回一个负值,如果大于,函数将返回正值;如果两者相等,函数将返回零。请参考下面的代码。

var a = [
  {FirsName: 'Ellie', LastName: 'Williams'},
  {FirstName: 'Lara', LastName: 'Croft'}
];
function SortArray(x, y) {
  if (x.LastName < y.LastName) {
    return -1;
  }
  if (x.LastName > y.LastName) {
    return 1;
  }
  return 0;
}
var s = a.sort(SortArray);
console.log(s);

输出:

(2) [{…}, {…}]
0: {FirstName: "Lara", LastName: "Croft"}
1: {FirsName: "Ellie", LastName: "Williams"}
length: 2

如你所见,数组是根据姓氏排序的。你还可以增加数组内的对象数量。你还可以根据名字对数组进行排序。

使用 JavaScript 中的 localeCompare()sort() 函数按字母顺序对对象数组进行排序

除了使用 if 条件,你还可以使用 localeCompare() 函数来比较字符串。它提供了许多其他的比较选项,你可以在函数内部设置这些选项。例如,让我们使用 localeCompare() 函数比较上述对象数组。请参考下面的代码。

var a = [
  {FirsName: 'Ellie', LastName: 'Williams'},
  {FirstName: 'Lara', LastName: 'Croft'}
];
function SortArray(x, y) {
  return x.LastName.localeCompare(y.LastName);
}
var s = a.sort(SortArray);
console.log(s);

输出:

(2) [{…}, {…}]
0: {FirstName: "Lara", LastName: "Croft"}
1: {FirsName: "Ellie", LastName: "Williams"}
length: 2

输出与上述方法相同。你还可以将该功能设置为在比较期间忽略任何标点符号和特殊字符。例如,如果我们在某人的姓氏之前有标点符号,则该函数不会对数组进行排序。在这种情况下,我们可以使用 localeCompare() 函数并将其设置为在比较期间忽略标点符号。请参考下面的代码。

var a = [
  {FirsName: 'Ellie', LastName: ',Williams'},
  {FirstName: 'Lara', LastName: 'Croft'}
];
function SortArray(x, y) {
  return x.LastName.localeCompare(y.LastName, 'fr', {ignorePunctuation: true});
}
var s = a.sort(SortArray);
console.log(s);

输出:

(2) [{…}, {…}]
0: {FirstName: "Lara", LastName: "Croft"}
1: {FirsName: "Ellie", LastName: ",Williams"}
length: 2

即使存在标点符号,数组也会根据姓氏排序。你还可以通过将 localeCompare() 函数的灵敏度设置为 base 来忽略字符串中存在的特殊字符,如下所示。

x.LastName.localeCompare(y.LastName, 'en', {sensitivity: 'base'});

查看此链接以获取有关 localeCompare() 函数的更多详细信息。

使用 JavaScript 中的 Collator()sort() 函数按字母顺序对对象数组进行排序

除了使用 if 条件,你还可以使用 Collator() 函数来比较字符串。例如,让我们使用 Collator() 函数比较上述对象数组。请参考下面的代码。

const collator = new Intl.Collator('en');
var a = [
  {FirsName: 'Ellie', LastName: 'Williams'},
  {FirstName: 'Lara', LastName: 'Croft'}
];
function SortArray(x, y) {
  return collator.compare(x.LastName, y.LastName);
}
var s = a.sort(SortArray);
console.log(s);

输出:

(2) [{…}, {…}]
0: {FirstName: "Lara", LastName: "Croft"}
1: {FirsName: "Ellie", LastName: "Williams"}
length: 2

输出与上述方法相同。你还可以通过更改 collator.compare() 函数中两个参数的位置,将排序顺序更改为降序。你还可以使用 Collator() 函数来比较不同语言的字符串;你只需要使用该语言初始化 collat​​or 对象。例如,在上面的代码中,我们使用 en 表示英语。查看此链接以获取有关 Collator() 函数的更多详细信息。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

相关文章 - JavaScript Array