关于js数组sort那点事

先来看这样一个例子:

function move(nums) {
  nums.sort((a, b) => b ? 0 : -1)
  return nums
}
var nums = [0, 2, 0, 1, 5]
var res = move(nums)
console.log('res: ', res) //[2, 1, 5, 0, 0]

这个输出的结果,相当于直接把 0 放到了最后 其他相对顺序不变;sort还有此等效果?why?

首先要明白,sort方法的用法,sort方法返回值1或0表示不交换位置,返回-1表示交换位置;
(a, b) => b ? 0 : -1
再来理解这里,使用的是第二个数来进行比较(可以决定0是放在前,还是放在后),非0即会产生交换。也即非0在前,所以0会放到最后。

其实,还可以得到一些其他妙用,比如数组前后交换:
(a, b) => -1
再比如,将某个数,比如2,放在结尾:
(a, b) => b - 2 ? 0 : -1
题主那里,就可以理解是将0放到结尾。
再来一个例子看下:

var arr = [1, 3, 4, 0, 0, -5];
const arrSort = (arr) => {
    return arr.sort((a, b) => b - 3 ? 0 : -1);
}
console.log(arrSort(arr));//[ 1, 4, 0, 0, -5, 3 ]
posted @   Jone_chen  阅读(222)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2018-04-20 关于ES6 Class语法相关总结
点击右上角即可分享
微信分享提示