前端必知必会-JavaScript 数组排序


JavaScript 数组排序

数组排序

sort() 方法按字母顺序对数组进行排序:

示例

const fruit = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();

反转数组

reverse() 方法反转数组中的元素:

示例

const fruit = ["Banana", "Orange", "Apple", "Mango"];
fruits.reverse();

通过组合 sort() 和 reverse(),您可以按降序对数组进行排序:

示例

const fruit = ["Banana", "Orange", "Apple", "Mango"];
fruit.sort();
fruit.reverse();

JavaScript 数组 toSorted() 方法

ES2023 添加了 toSorted() 方法,作为一种在不改变原始数组的情况下对数组进行排序的安全方法。

toSorted() 和 sort() 之间的区别在于,第一个方法创建一个新数组,保持原始数组不变,而最后一个方法会改变原始数组。

示例

const months = ["Jan", "Feb", "Mar", "Apr"];
const sorted = months.toSorted();

JavaScript 数组 toReversed() 方法

ES2023 添加了 toReversed() 方法,作为一种在不改变原始数组的情况下反转数组的安全方法。

toReversed() 和 reverse() 之间的区别在于,第一个方法创建一个新数组,保持原始数组不变,而最后一个方法会改变原始数组。

示例

const months = ["Jan", "Feb", "Mar", "Apr"];
const reversed = months.toReversed();

数字排序

默认情况下,sort() 函数将值排序为字符串。

这对字符串很有效(“Apple”排在“Banana”之前)。

如果将数字排序为字符串,则“25”大于“100”,因为“2”大于“1”。

因此,sort() 方法在对数字进行排序时会产生不正确的结果。

您可以通过提供比较函数来解决这个问题:

示例

const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});

使用相同的技巧对数组进行降序排序:

示例

const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});

比较函数

比较函数的目的是定义替代排序顺序。

比较函数应返回负值、零值或正值,具体取决于参数:

function(a, b){return a - b}
当 sort() 函数比较两个值时,它会将值发送到比较函数,并根据返回的(负值、零值、正值)对值进行排序。

如果结果为负数,则 a 排在 b 之前。

如果结果为正数,则 b 排在 a 之前。

如果结果为 0,则两个值的排序顺序不会发生任何变化。

示例:

比较函数比较数组中的所有值,每次比较两个值(a、b)。

当比较 40 和 100 时,sort() 方法会调用比较函数 (40, 100)。

该函数计算 40 - 100 (a - b),由于结果为负数 (-60),sort 函数会将 40 排序为小于 100 的值。

您可以使用此代码片段尝试按数字和字母顺序排序:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程岁月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值