JavaScript 中的 sort() 方法

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 数组进行排序,以便按照发明家的寿命从高到低进行排列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值