JavaScript的sort()方法
提示:这里简述项目相关背景:
JavaScript 中的 sort() 方法是用于排序数组的方法。它用于对数组的元素进行排序,并且可以根据需要自定义排序规则。
基本使用方法
提示:这里描述项目中遇到的问题:
例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据
APP 中接收数据代码:
const fruits = ['apple', 'banana', 'cherry', 'date'];
// 默认排序(按字母顺序)
fruits.sort();
console.log(fruits); // 输出:['apple', 'banana', 'cherry', 'date']
// 逆序排序
fruits.reverse();
console.log(fruits); // 输出:['date', 'cherry', 'banana', 'apple']
自定义排序规则:
你可以传递一个比较函数给 sort() 方法,以定义如何排序数组。比较函数接受两个参数(两个要比较的元素),并根据比较结果返回负数、零或正数来决定它们的顺序。
例如,按字符串长度升序排序数组:
const fruits = ['apple', 'banana', 'cherry', 'date'];
fruits.sort(function(a, b) {
return a.length - b.length;
});
console.log(fruits); // 输出:['date', 'apple', 'cherry', 'banana']
按数字大小升序排序数组:
const numbers = [10, 5, 8, 2, 1];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers); // 输出:[1, 2, 5, 8, 10]
按对象属性排序:
如果要排序的是包含对象的数组,可以使用比较函数来按对象属性排序。例如,按年龄升序排序对象数组:
const people = [
{ name: 'Alice', age: 30 },
{ name: 'Bob', age: 25 },
{ name: 'Charlie', age: 35 }
];
people.sort(function(a, b) {
return a.age - b.age;
});
console.log(people); // 输出:[ { name: 'Bob', age: 25 }, { name: 'Alice', age: 30 }, { name: 'Charlie', age: 35 } ]
注意:
提示:需要注意的是,sort() 方法会原地修改数组,并返回排序后的数组,因此不会创建新的数组。
请谨慎使用 sort() 方法,确保你了解其默认行为和自定义排序规则,以便在实际应用中得到正确的结果。
提示:
在 JavaScript 的 sort 方法中,比较函数需要返回一个负数、0 或正数,以告诉排序算法如何排列元素。通常的约定是:
如果返回负数,表示第一个元素应该在排序结果中排在第二个元素之前。
如果返回正数,表示第二个元素应该在排序结果中排在第一个元素之前。
如果返回0,表示两个元素在排序中的位置相对不变。
比如下面这段代码
const inventors = [
{ first: 'Albert', last: 'Einstein', year: 1879, passed: 1955 },
{ first: 'Isaac', last: 'Newton', year: 1643, passed: 1727 },
{ first: 'Galileo', last: 'Galilei', year: 1564, passed: 1642 },
{ first: 'Marie', last: 'Curie', year: 1867, passed: 1934 },
{ first: 'Johannes', last: 'Kepler', year: 1571, passed: 1630 },
{ first: 'Nicolaus', last: 'Copernicus', year: 1473, passed: 1543 },
{ first: 'Max', last: 'Planck', year: 1858, passed: 1947 },
{ first: 'Katherine', last: 'Blodgett', year: 1898, passed: 1979 },
{ first: 'Ada', last: 'Lovelace', year: 1815, passed: 1852 },
{ first: 'Sarah E.', last: 'Goode', year: 1855, passed: 1905 },
{ first: 'Lise', last: 'Meitner', year: 1878, passed: 1968 },
{ first: 'Hanna', last: 'Hammarstr枚m', year: 1829, passed: 1909 }
];
const inventorsByLive=inventors.sort(function(a,b){
const lastInventor = a.passed - a.year;
const nextInventor = b.passed - b.year;
return lastInventor > nextInventor ? -1 : 1;
});
在比较函数中,首先计算了两位发明家的寿命差值:
lastInventor
表示第一个发明家 a 的寿命差值,计算方法是 a.passed - a.year
,即去世年份减去出生年份。
nextInventor
表示第二个发明家 b 的寿命差值,计算方法是 b.passed - b.year
。
接下来,比较这两位发明家的寿命差值 lastInventor 和 nextInventor,并根据它们的大小来确定排序顺序。如果 lastInventor 大于 nextInventor
,则返回 -1
,表示 a 应该在 b 之前;否则返回 1
,表示 b 应该在 a 之前。
最终,sort 方法会使用这个比较函数来对 inventors 数组进行排序,以便按照发明家的寿命从高到低进行排列。