数组的重排序方法

一、前言

我们知道当涉及到数据结构和算法时,必然会想到或用到排序。下面我们看一下,JS数组中提供的几种重排序方法。


二、reserve()方法

反转数组元素的顺序,并返回修改后的数组。

var arr = [2,4,2,7,9,3,23,15];
arr.reverse();
console.log(arr); // [15,23,3,9,7,2,4,2]
复制代码

三、sort()方法

按照升序排列数组元素,即从小到大进行排序,并返回修改后的数组。

注意:sort方法会调用每个数组元素的toString()方法,然后再比较大小,最后排序。

1. 一般的情况

1.1 数值型的sort()方法

var arr = [2,4,2,7,9,3,23,15];
arr.sort();
console.log(arr); // [15, 2, 2, 23, 3, 4, 7, 9]
复制代码

1.2 字符串的sort()方法

var arr = ["c", "a", "b"];
arr.sort();
console.log(arr); // ["a", "b", "c"]
复制代码

2. 传入比较函数作为参数

我们知道sort()方法可以实现升序排列,那么降序排列怎么办呢?

sort()方法接收一个比较函数作为参数,这样就能指定顺序。

2.1 升序的比较函数

接收两个参数,如果第一个参数应该位于第二个参数之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个参数之后则返回一个正数。

function compareUp(val1, val2) {
    if(val1 < val2) {
        return -1;
    }else if(val1 > val2) {
        return 1;
    }else {
        return 0;
    }
}
var arr = [2,4,2,7,9,3,23,15];
arr.sort(compareUp);
console.log(arr); // [2, 2, 3, 4, 7, 9, 15, 23]
复制代码

2.2 降序的比较函数

接收两个参数,如果第一个参数应该位于第二个参数之前则返回一个正数,如果两个参数相等则返回0,如果第一个参数应该位于第二个参数之后则返回一个负数。

function compareDown(val1, val2) {
    if(val1 < val2) {
        return 1;
    }else if(val1 > val2) {
        return -1;
    }else {
        return 0;
    }
}
var arr2 = [2,4,2,7,9,3,23,15];
arr2.sort(compareDown);
console.log(arr2); // [23, 15, 9, 7, 4, 3, 2, 2]
复制代码

3. 比较函数的简化

对于数值类型或者其valueOf()方法会返回数值类型的对象类型,可以用更简单的比较函数。只要这个函数的第二个值减去第一个值即可。

function commonUp2(val1, val2) {
    return val1 - val2;
}
var arr3 = [2,4,2,7,9,3,23,15];
arr3.sort(commonUp2);
console.log(arr3); // [2, 2, 3, 4, 7, 9, 15, 23]

function commonDown2(val1, val2) {
    return val2 - val1;
}
var arr4 = [2,4,2,7,9,3,23,15];
arr4.sort(commonDown2);
console.log(arr4); // [23, 15, 9, 7, 4, 3, 2, 2]
复制代码

四、本节思维导图

源码地址: github.com/Knight174/M…

猜你喜欢

转载自blog.csdn.net/weixin_34025151/article/details/91399433