JS sort() 函数

说实话,看源码没看懂,作为一个码农来说是很失败了。
虽然想要 知其然而知其所以然,然而技术太菜没办法,只能先把表面使用掌握了。

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;
})

 

posted @ 2019-10-16 17:21  Fannn  阅读(1624)  评论(0编辑  收藏  举报