关于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 @ 2022-04-20 15:10  Jone_chen  阅读(211)  评论(0编辑  收藏  举报