摘要:关于数组的使用方法网上一大堆,这我也不多费口舌,这里,我主要讲讲自个儿怎么去理解这个方法去进行升序和降序的。有理解不对的,希望大家提出来以便我改正。感觉自己多理解理解就能理解了。
关于数组sort()的使用方法网上一大堆,这我也不多费口舌,这里,我主要讲讲自个儿怎么去理解这个sort()方法去进行升序和降序的。有理解不对的,希望大家提出来以便我改正。
首先,要理解sort()其实是利用递归进行冒泡排序的
其次,sort()方法接收的是一个比较函数compare(x,y),接收两个参数,主要是根据参数的比较来判断返回值的
最后,记住这样一句话就好理解下面的代码了。凡是return 1的时候就交换位置
直接看代码吧。
1.升序排序
var arr = new Array(1,5,2,4); function ascCompare(x,y) { if(x > y) { return 1; } else if(x === y) { return 0; } else { return -1; } } var newArr = arr.sort(ascCompare); console.log(arr);//会改变原来的数组[1,2,4,5] console.log(newArr);//[1,2,4,5]
理解:
第一轮:[1,5,2,4]
①x=1,y=5,x
③x=5,y=4,x>y,return 1,交换位置--[1,2,4,5];
第二轮:(从第二个元素开始)
①x=2,y=4,x
①x=4,y=5,x
2.降序排序(同理)
var arr = new Array(1,5,2,4); function descCompare(x,y) { if(x < y) { return 1; } else if(x === y) { return 0; } else { return -1; } } var newArr = arr.sort(descCompare); console.log(arr);//会改变原来的数组[5,4,2,1] console.log(newArr);//[5,4,2,1]
理解:
第一轮:[1,5,2,4]
①x=1,y=5,x
①x=2,y=4,x
第三轮:(从第三个元素开始)
①x=2,y=1,x>y,return -1,不交换位置--[5,4,2,1];
最后完成了排序。
最后将这两个方法改成更简单的,只要记住x-y的结果为正数就交换位置就很好理解
3.升序排序(2)
var arr = new Array(1,5,2,4); function ascCompare2(x,y) { return x - y; } var newArr = arr.sort(ascCompare2); console.log(arr);//[1,2,4,5] console.log(newArr);//[1,2,4,5]
理解:跟上面的升序原理理解一样,只不过这里只要理解成x-y的结果为正数就交换位置即可。
第一轮:[1,5,2,4]
①x=1,y=5,x-y<0,不交换位置--[1,5,2,4];
②x=5,y=2,x-y>0,交换位置--[1,2,5,4];
③x=5,y=4,x-y>0,交换位置--[1,2,4,5];
第二轮:(从第二个元素开始)
①x=2,y=4,x-y<0,不交换位置--[1,2,4,5];
②x=4,y=5,x-y<0,不交换位置--[1,2,4,5];
第三轮:(从第三个元素开始)
①x=4,y=5,x-y<0,不交换位置--[1,2,4,5];
最后完成了排序。
4.降序排序(2)
var arr = new Array(1,5,2,4); function descCompare2(x,y) { return y - x; } var newArr = arr.sort(descCompare2); console.log(arr);//[5,4,2,1] console.log(newArr);//[5,4,2,1]
理解:跟上面的降序原理理解一样,只不过这里只要理解成y-x的结果为正数就交换位置即可。
第一轮:[1,5,2,4]
①x=1,y=5,y-x>0,交换位置--[5,1,2,4];
②x=1,y=2,y-x>0,交换位置--[5,2,1,4];
③x=1,y=4,y-x>0,交换位置--[5,2,4,1];
第二轮:(从第二个元素开始)
①x=2,y=4,y-x>0,交换位置--[5,4,2,1];
②x=2,y=1,y-x<0,不交换位置--[5,4,2,1];
第三轮:(从第三个元素开始)
①x=2,y=1,y-x<0,不交换位置--[5,4,2,1];
最后完成了排序。
感觉自己多理解理解就能理解了。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91715.html
摘要:要实现这一点,首先应把数组的元素都转换成字符串如有必要,以便进行比较。比较函数应该具有两个参数和,其返回值如下若小于,在排序后的数组中应该出现在之前,则返回一个小于的值。 sort()排序的原理 最近在leetcode刷题的时候遇到一个排序问题之前一直都忽略了sort排序的原理,让我们看下w3c对于sort()的说明:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说...
摘要:写在前面专题系列是我写的第二个系列,第一个系列是深入系列。专题系列自月日发布第一篇文章,到月日发布最后一篇,感谢各位朋友的收藏点赞,鼓励指正。 写在前面 JavaScript 专题系列是我写的第二个系列,第一个系列是 JavaScript 深入系列。 JavaScript 专题系列共计 20 篇,主要研究日常开发中一些功能点的实现,比如防抖、节流、去重、类型判断、拷贝、最值、扁平、柯里...
摘要:中基础数据类型数据类型名称数据类型说明只有一个值,即,声明变量的初始值。只有一个值,即,表示空指针,的值是派生的值。由零或多个位字符组成只有两个值,即和该类型使用来表示整数和浮点数。中的对象其实就是一组数据和功能的集合。 JavaScript 中基础数据类型 数据类型名称 数据类型说明 Undefined 只有一个值,即 undefined ,声明变量的初始值。 Nul...
摘要:目录导语对象对象小结导语本系列文章将重点讲解提供的原生库标准库,只要在支持语言的平台,标准库中的提供的对象的属性和方法都能使用对象对象的理解讲的标准库,首先要从对象谈起,因为之后的所有对象都可以看做是对象构造出来的因此,对象可以看做是一个构 目录 导语 1. Object对象 2. Array对象 3. 小结 导语 本系列文章将重点讲解JavaScript提供的原生库——标准库,只要...
摘要:方法可以接受一个可选的参数,比较回调函数。方法会修改原本数组输出如上,在调用方法后,自身数组被修改。对于长数组会使用快速排序,而快速排序一般是不稳定的。所以方法返回的数组永远是该方法认为的升序数组。 前几天在某公司面试的时候被问到关于这个方法的默认值的问题(然而面试官跟我说的其实是错的,当场我还不够底气去反驳)。突然发现对这个方法的了解还不够,因此回来查了资料,看了v8引擎的实现和EC...
阅读 3442·2021-11-22 12:00
阅读 629·2019-08-29 13:24
阅读 2893·2019-08-29 11:31
阅读 2567·2019-08-26 14:00
阅读 3175·2019-08-26 11:42
阅读 2462·2019-08-23 18:31
阅读 783·2019-08-23 18:27
阅读 2759·2019-08-23 16:58