關於js陣列sort那點事
阿新 • • 發佈:2022-04-20
先來看這樣一個例子:
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 ]