js数组排序

在JS中,sort方法可用于数组的排序;先来看一个例子:

var arr = [1, 2, 3, 5, 7, 78, 8, 89];
arr.sort();
console.log(arr); // [1, 2, 3, 5, 7, 78, 8, 89]

代码非常简单,上面得到的结果是从小到大的一个排序,假设要实现从大到小排序呢?这个时候就要借助函数了,见代码:

var arr = [1, 2, 3, 5, 7, 78, 8, 89];
arr.sort(function(a, b) {
    return b - a
});
console.log(arr); // [89, 78, 8, 7, 5, 3, 2, 1]

OK,以上的排序方法较为简单,那么还有没有其它的方法来实现排序呢?肯定是有的,冒泡排序这个时候就排上用场了;冒泡排序的原理就是从第一项开始, 依次与数组中所有项(包括它自己)逐个进行比较, 如果当前项(当前项是每次比较之后的最大值)大于下一项, 则交换两者的位置;还是以上面数组为例,我们来用冒泡排序,见代码:

var sort = function(arr) {
    for (var i = 0; i < arr.length; i++) {
        for (var j = 0; j < arr.length - 1 - i; j++) {
            var temp = 0;
            if (arr[j] > arr[j + 1]) {  
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp
            }
        }
    }
    return arr;
}
var arr = [2, 5, 3, 1, 7, 8, 78, 89];
console.log(sort(arr)); // [1, 2, 3, 5, 7, 8, 78, 89]

可以看到,得到的是一个从小到大的数组;一维数组的排序很简单,那么二维数组呢?其实原理都一样,排序也非常简单,直接见一个例子:

假设有这样一个数组:var array = [[4,'dasd'],[5,'dasd'],[1,'dasd'],[2,'dasd'],[3,'dasd'],[13,'dasd'],[23,'dasd']];要求按其ID进行从小到到的排序 ,如何实现呢?见代码:

方法一,利用sort方法来实现:

var array = [[4,'dasd'],[5,'dasd'],[1,'dasd'],[2,'dasd'],[3,'dasd'],[13,'dasd'],[23,'dasd']];
array.sort(function(x, y) {
    a = x[0];
    b = y[0];
    if (a - b > 0) {
        return 1
    } else if (a - b < 0) {
        return -1
    } else {
        return 0
    }
})
console.log(array);

方法二,利用冒泡排序来实现:

var sort = function(array) {
    for (var i = 0; i < array.length; i++) {
        for (var j = 0; j < array.length - 1 - i; j++) {
            var temp = 0;
            if (array[j][0] > array[j + 1][0]) {
                temp = array[j][0];
                array[j][0] = array[j + 1][0];
                array[j + 1][0] = temp;
            }
        }
    }
    return array
}
console.log(sort(array));

两种方法得到的结果都一样,相对而言,方法一简单一些;

原文地址:https://www.cnblogs.com/jone-chen/p/5589981.html