关于javascript:JS数组排序方式及详细讲解

8次阅读

共计 1224 个字符,预计需要花费 4 分钟才能阅读完成。

比方有这样一个数组
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(v1<v2){return -1;}
    else if(v1>v2){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;i<arr.length-1;i++){ // 趟数
        for(var j=0;j<arr.length-1-i;j++){  // i 趟比拟几次
            if(arr[j]>arr[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]<arr[j+1] 即可

继续更新 …

正文完
 0