JS数组排序方式及详细讲解

比如有这样一个数组
var arr=[ 1 , 3 , 4 , 10 , 5 , 8 , 9 , 2 , 21]
用以下几种方法来对它进行排序

1、sort方法

sort()是js中可以直接用来排序的方法,默认情况下,是按升序排列数组,但sort()通常是按比较字符串(ASCII)的方式来进行排序,如:

arr.sort();
console.log(arr)  //[1,10,2,21,3,4,5,8,9]
//注:sort()会改变原数组

得到的顺序看似逻辑没有问题,但绝对不是比较一个数值数组的最佳方式,因此,sort()方法通常需要接收一个函数来作为比较的参考,如下:

//定义一个比较函数
function compare(v1,v2){
    if(v1v2){
      return 1;
    }
    else{
      return 0
    }
}
arr.sort(compare)
console.log(arr) //[1,2,3,4,5,8,9,10,21]

简单来说就是如果v1应该位于v2之前,返回一个负数;v1应该位于v2之后,返回正数;相等返回0;
其实想要得到上面这个结果,只需要用v1-v2即可得到正、负数以及0,如下简写:

function compare(v1,v2){
    return v1-v2;
}
arr.sort(compare)
console.log(arr) //[1,2,3,4,5,8,9,10,21]

如果想要降序排列,也只需要将v2-v1即可,如下:

function compare(v1,v2){
    return v2-v1;
}
arr.sort(compare)
console.log(arr) //[21,10,9,8,5,4,3,2,1]

也可以使用reverse()来将升序的数组直接进行翻转

arr.reverse()

注意reverse()是翻转方法,实际是不能用来排序的,他只能将一个数组直接翻转过来,如下所示,得到的结果与排序一点关系都没有。

var arr1=[1,3,6,10,2]
arr1.reverse();
console.log(arr1) // [2,10,6,3,1]

2、冒泡排序

冒泡排序也是相对比较简单,比较常用的一种排序方式,它的实现原理是依次比较相邻的两个数,根据顺序交换元素,直至没有可交换的,则排序结束。

function arrSort(arr){
    for(var i=0;iarr[j+1]){
                //交换位置
                var temp=arr[j]; //设置一个暂存区
                arr[j]=arr[j+1];
                arr[j+1]=temp
            }
        }
    }
    return arr
}
console.log(arrSort(arr)) //[1,2,3,4,5,8,9,10,21]

当然如果需要降序的话,将条件改为 arr[j] 即可

持续更新...

你可能感兴趣的:(javascript前端)