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

原文地址:https://www.cnblogs.com/fannn/p/11686928.html

时间: 2024-08-29 10:05:21

JS sort() 函数的相关文章

Js 数组排序函数sort()

最近看到一个js函数sort()觉得挺有意思,写在这里与大家分享.如果有什么地方不对或者有更好的写法,也请大家不吝赐教. sort()返回一个元素已经进行了排序的 Array 对象. 1. 按字母排序 直接使用sort()函数,默认按字母顺序排. var arr = new Array("dd", "aa", "bb", "cc"); arr.sort(); 此时返回结果排序为  "aa", "b

JS中sort()函数

Js中用方法sort()为数组排序.sort()方法有一个可选参数,是用来确定元素顺 //升序 arr.sort(function(a,b){ retun a-b; }); //降序 arr.sort(function(a,b){ retun b-a; }); 以上方法可以实现对数组按数值大小排序JS中sort()函数问题 原文地址:https://www.cnblogs.com/yhliu/p/11055522.html

js常用函数和常用技巧

学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Ajax请求 jquery ajax函数 我自己封装了一个ajax的函数,代码如下: var Ajax = function(url, type success, error) { $.ajax({ url: url, type: type, dataType: 'json', timeout: 100

js sort 二维数组排序的用法小结

最近在搞js 排序的问题,因为数据库排序太耗资源,如果能转移到客户端去排序,能大大D减少服务器内存消耗.客户端的话,除了js,就是as了,可惜我as学得太烂,所以只能选择js来研究研究了...经过我的测试,js内置方法sort的效率非常高 我们知道在js中默认提供了sort函数,但是这个函数默认是按照数组内容的ascii码升序进行排列的,如果我们要对二维数组排序要如何做呢?在php中是有multi_sort函数可供调用的,但是在js中似乎没有这种函数,但是没关系 ,因为js的sort函数其实也提

自己编写JavaScript的sort函数

在平常开发中我们经常会遇到对数组进行排序的场景,js给我们提供了sort方法可以对数组元素进行排序,默认是按ASCII字母表顺序排序,请看下面例子: var a = [1, 3, 2, 4];var b = ['b', 'a', 'c', 'd']; a.sort();b.sort(); console.log(a); // [1, 2, 3, 4]console.log(b); // ['a', 'b', 'c', 'd'] 但有些时候我们需要自己定义排序要求,这时候我们就可以给sort函数传

JS常用函数大全

免疫bodyclick方法 这个是个比较好的方法,一个弹出窗口,要设定在任何其他地方点击这个窗口会自动消失,但点这个窗口内部是没事的.那么就要用到这个方法了. // (对body点击产生效果免疫的部分, 阻止冒泡body事件) // 通过ID屏蔽->@args(event, targetID) function blockClickToBodyById(a,b){return b==$(a.target).prop("id")||$(a.target).parents("

js:深入函数的定义

函数定义方式: 1.function fun1(){alert("fun1");}  //函数就是一个非常特殊的对象,是一个Function的实例,其实在内存中存储的操作是通过一个键值对来存储的. 2.由于函数是一个对象,所以可以通过如下方式定义 var fun2 = fun1;  //通过函数拷贝给fun2完成赋值,但fun1.fun2这两个引用并没有指向同一个对象(虽然他们指向的对象的内容是一样的). fun1 = function(){alert("fun111&quo

(8)关于数组的sort()函数

sort()函数如果不加参数,则默认按ascii码表排序. 若加参数,则其参数必须为判断函数,必须为判断函数.必须都有返回值!!! 首先来看一个例子, <html> <body> </body> <script> var a=[7,'-3',5,2,8]; function paixu(a,b){ return 1; } a.sort(paixu);// [8,2,5,-3,7]; </script> </html> 也就是说,如果函

对JS中函数的理解

函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能) var fn=function(a){return a+100;} fn=function(a){return a+200;} alert(fn(100)); //300 要访问函数的引用(指针)而不是执行函数时,必须去掉圆括号,加上圆括号表示访问函数执行后的结果 函数体内部的语句在执行时,一旦