[关闭]
@xudongh 2017-03-05T16:54:44.000000Z 字数 1665 阅读 1549

二维数组的排序

前端开发


在JS中有两种可以直接用来重排序的方法:reverse()和sort()。
reverse()方法会翻转数组项的顺序,并返回原数组。

  1. var arr = [1,2,3,4,5];
  2. arr.reverse();
  3. console.log(arr); //[5,4,3,2,1]

sort()方法更加灵活,可按照一定的规则进行排序,其语法为:

  1. arr.sort(compareFunction);

compareFunction是用于指定按某种顺序进行排列的函数,在不指定该函数时,即默认情况下, sort()方法按照升序排列数组项——即最小的值位于最前面,最大的值排在最后面。
由于sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,因此数组元素实际上的排序方法是按照数组中每个字符的Unicode码进行排序。

  1. var arr = [5,10,0,15,1];
  2. arr.sort();
  3. console.log(arr); //[0,1,10,15,5]

在指定compareFunction的情况下,该函数接受两个参数,数组会按照调用该函数的返回值进行排序。即a和b是两个将要被比较的元素:

因此,假如要对一个数组进行升序排序,可以这样做:

  1. var arr = [5,10,0,15,1];
  2. //比较常用的比较函数
  3. function compare(a,b){
  4. return a-b;
  5. }
  6. arr.sort(compare);
  7. console.log(arr); //[0,1,5,10,15]

以上针对的是一维数组的排序,对于二维数组,同样可以采用sort()方法。
在compareFunction()函数中,要注意比较参数的传参问题。
例如有一组同学的名字以及对应身高的数据,现要对身高进行降序排列。

  1. var arr=[
  2. ["小明",172],
  3. ["小刚",182],
  4. ["小红",168],
  5. ["小强",176],
  6. ["小云",172]
  7. ];
  8. //二维数组的比较函数
  9. function compare(a,b){
  10. return b[1]-a[1]
  11. }
  12. arr.sort(compare);
  13. console.log(arr); //[["小刚", 182], ["小强", 176], ["小明", 172], ["小云", 172], ["小红", 168]]

若不使用sort()方法,使用算法排序对一位数组进行排序(当然我们在js中没必要这样做),如用冒泡排序:

  1. function compare(arr){
  2. var i = arr.length,
  3. j;
  4. while(i > 0){
  5. for(var j = 0; j<i-1; j++){
  6. if(arr[j]>arr[j+1]){
  7. var tem = arr[j+1];
  8. arr[j+1] = arr[j];
  9. arr[j] = tem;
  10. }
  11. }
  12. i--;
  13. }
  14. return arr;
  15. }
  16. var arr = [5,10,0,15,1];
  17. console.log(compare(arr)); //[0, 1, 5, 10, 15]

同样,对二维数组用算法排序,和一维数组的排序并无异同:

  1. function compare(arr){
  2. var i = arr.length,
  3. j;
  4. while(i > 0){
  5. for(var j = 0; j<i-1; j++){
  6. if(arr[j][1]>arr[j+1][1]){
  7. var tem = arr[j+1][1];
  8. arr[j+1][1] = arr[j][1];
  9. arr[j][1] = tem;
  10. }
  11. }
  12. i--;
  13. }
  14. return arr;
  15. }
  16. var arr=[
  17. ["小明",172],
  18. ["小刚",182],
  19. ["小红",168],
  20. ["小强",176],
  21. ["小云",172]
  22. ];
  23. console.log(compare(arr)); //[["小明", 168], ["小刚", 172], ["小红", 172], ["小强", 176], ["小云", 182]]
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注