📅  最后修改于: 2023-12-03 15:38:43.571000             🧑  作者: Mango
在Javascript中,数组排序是一项常见的操作。在本文中,我们将介绍如何在Javascript中对数组进行排序。
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()方法默认按照字母顺序进行排序。
在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属性进行排序。
有时候我们需要在数组中的某个位置调用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 }
有时候我们需要对某个属性的值为数组对象进行排序,并按照该属性的值来对整个数组进行排序。以下是这种用法的示例:
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()方法,我们可以完成几乎所有的排序需求。