📌  相关文章
📜  如何对数组进行排序 - Javascript (1)

📅  最后修改于: 2023-12-03 15:38:43.571000             🧑  作者: Mango

如何对数组进行排序 - Javascript

在Javascript中,数组排序是一项常见的操作。在本文中,我们将介绍如何在Javascript中对数组进行排序。

1. sort() 方法

Javascript中的sort()方法是用来对数组进行排序的。sort()方法默认将元素转换为字符串,然后按字母顺序排序。通过传递一个比较函数,我们可以对数组进行自定义排序。比较函数需要返回一个负数、0或者正数来指示相应元素的相对位置。以下是一个使用sort()方法进行基本排序的示例:

let arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
arr.sort(); // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

可以看到,sort()方法默认按照字母顺序进行排序。

2. 自定义比较函数

在Javascript中,我们可以传递一个自定义的比较函数来完成更精细的排序操作。比较函数接收两个参数(a, b),并根据它们的顺序返回一个负数、0或者正数。如果返回负数,则a在b之前;如果返回正数,则a在b之后;如果返回0,则a和b位置不变。

以下是使用自定义比较函数对数组进行排序的示例。

let arr = [
  { name: 'Bob', age: 23 },
  { name: 'Alice', age: 32 },
  { name: 'Charlie', age: 12 },
  { name: 'David', age: 45 },
];

arr.sort(function(a, b){
  if(a.age < b.age) return -1;
  if(a.age > b.age) return 1;
  return 0;
});

console.log(arr); 
// [{ name: 'Charlie', age: 12 },
//  { name: 'Bob', age: 23 },
//  { name: 'Alice', age: 32 },
//  { name: 'David', age: 45 }]

可以看到,数组中的对象按照age属性进行排序。

3. 数组中的sort()方法调用

有时候我们需要在数组中的某个位置调用sort()方法,而不是通过数组变量进行调用。例如,我们可以对类数组对象进行排序,而且对于大多数情况下并不需要将其转换为真正的数组。这时,我们可以使用数组对象的call()方法来进行调用。以下是这种用法的示例。

let pseudoArray = {
  0: 23,
  1: 12,
  2: 45,
  length: 3
};

Array.prototype.sort.call(pseudoArray); 
// { '0': 12, '1': 23, '2': 45, length: 3 }
4. 对象数组的排序

有时候我们需要对某个属性的值为数组对象进行排序,并按照该属性的值来对整个数组进行排序。以下是这种用法的示例:

let arr = [
  { name: 'Bob', scores: [67, 89, 72] },
  { name: 'Alice', scores: [75, 92, 87] },
  { name: 'Charlie', scores: [87, 62, 91] },
  { name: 'David', scores: [89, 72, 70] },
];

function compare(a, b) {
  let total1 = a.scores.reduce((sum, score) => sum + score);
  let total2 = b.scores.reduce((sum, score) => sum + score);
  return total2 - total1;
}

arr.sort(compare);

console.log(arr); 
// [{ name: 'Charlie', scores: [87, 62, 91] },
//  { name: 'Alice', scores: [75, 92, 87] },
//  { name: 'Bob', scores: [67, 89, 72] },
//  { name: 'David', scores: [89, 72, 70] }]

以上就是对数组进行排序的基本操作,通过自定义的比较函数和sort()方法,我们可以完成几乎所有的排序需求。