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