JS之数组排序sort
首先我们先来了解一下 sort()方法:
作用:将数组按照Unicode编码进行排序,并直接影响原数组
console.log();语句后面的注释为其在网页中的运行结果
var arr1 = ["t","b","f","e","v","d"];
//sort是默认按照Unicode编码从大到小进行排序(会影响原数组)
var result1 = arr1.sort();
console.log(JSON.stringify(result1));//["b","d","e","f","t","v"]
console.log(JSON.stringify(arr1));//["b","d","e","f","t","v"]
说句题外话,如果你学过C的话,那么这个跟冒泡排序就是一个道理
话不多说哈,看代码:
//sort排序 (直接影响原数组)(原理同冒泡排序)
var arr2 = [3,4,5,7,4,2,5,2,1,9];
var result2 = arr2.sort(function(a,b){
if (a > b)
return 1;
else
return -1;
})
console.log(JSON.stringify(result2));//[1,2,2,3,4,4,5,5,7,9]
console.log(JSON.stringify(arr2));//[1,2,2,3,4,4,5,5,7,9]
我在这里是将sort的返回值定义为一个函数,
然后在函数里用if逻辑来达到这个目的(升序)
可以看出,当a>b时,大值在前,需换置,所以return 1,正值(true),所以就调用sort;
当a<b时,大值在后,不用位,所以return -1,负值(false),所以就不d调sort;
以此来达到排序的目的。
但我发现:反正你返回的是一个number数值,至于这么冗长吗?那我这样行不行,我直接return a - b ?????
var arr2 = [3,4,5,7,4,2,5,2,1,9];
var result2 = arr2.sort(function(a,b){
return a - b;//返回值为正,则交换位置,大值在后,则升序
console.log(JSON.stringify(result2));//[1,2,2,3,4,4,5,5,7,9]
console.log(JSON.stringify(arr2));//[1,2,2,3,4,4,5,5,7,9]
运行之后,可以,ok就这样
注:升序、降序问题
- 如果需要升序的话,当a > b的时候,大值在前,得换位置,得返回正值,所以return a - b
- 如果需要降序的话,当a > b的时候,就不用换位置,也就是a < b 的时候需要换位置,把a挪到<右边是不是得到0 < b - a,这就是需要满足的条件:return b - a;返回正值的时候,说明b > a,那么ab换位置为ba,这不就是降序了嘛!!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------