說實話,看源碼沒看懂,作為一個碼農來說是很失敗了。
雖然想要 知其然而知其所以然,然而技術太菜沒辦法,只能先把表面使用掌握了。
JS 的sort函數,有傳參和不傳參兩種模式,不傳參我這里就不說了,隨便看看都能掌握。
這里對傳參做一下記錄,好讓自己以后忘記了可以快速記起來(只是適用於我自己快速撿起的方式)
傳參的類型為函數,函數又有兩個形參a和b,
function (a, b) {
return a - b
}
數組會根據傳入的函數的返回值去進行排序。
我這里只能浮於表面的來對自己進行一些強行的規則注釋(以此來幫助我自己記住如何使用):
sort函數默認是從小到大進行排序的,函數傳入兩個參數,順序為(a, b)
如果需要從小到大排序,那么就需要 return a - b;(死記硬背)
如果想要從大到小排序,那么就返回 return b - a.
------
如果數組的內容是對象,就比較對象的值: return a.xx - b.xx
這里還可以進行多次排序,當排序條件一相等時,進行條件二的排序...以此類推
當 a.xx === b.xx 的時候
return a.yy - b.yy //當xx相等的時候,按yy從小到大排序
return b.yy - a.yy //當xx相等的時候,按yy從大到小排序
------
最后還有需要注意一點的就是
如果return 的表達式中,沒有a,b參與,直接返回 數字,分為兩種情況
return 1 //數組原樣輸出,不排序
return 0 //數組原樣輸出,不排序
return -1 //數組倒序
------代碼嘗試console.log看結果
let arr1 = [1, 4, 2, 5, 6, 7, 9, 8, 3, 0];
let arr2 = [
{ v: 1, index: 0, key: 1 },
{ v: 10, index: 1, key: 1 },
{ v: 2, index: 2, key: 1 },
{ v: 5, index: 3, key: 1 },
{ v: 5, index: 1, key: 1 },
{ v: 5, index: 14, key: 1 },
{ v: 5, index: 2, key: 1 },
{ v: 5, index: 2, key: 8 },
{ v: 5, index: 2, key: 4 },
{ v: 5, index: 2, key: 7 },
{ v: 5, index: 2, key: 6 },
{ v: 5, index: 4, key: 1 },
{ v: 5, index: 34, key: 1 },
{ v: 7, index: 5, key: 1 },
{ v: 6, index: 6, key: 1 },
{ v: 5, index: 7, key: 1 },
{ v: 8, index: 8, key: 1 },
{ v: 1, index: 9, key: 1 },
{ v: 3, index: 10, key: 1 }
];
let arr3 = arr2.sort(function (a, b) {
return b.v === a.v ? b.index === a.index ? b.key - a.key : b.index - a.index : a.v - b.v;
})