Array学习第五天

142 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

排序方法

数组有两个方法可以用来对元素重新排序:reverse()和 sort()。

reverse()方法就是将数组元素反向排列。例如

let nums = [11, 22, 33];
nums.reverse();
console.log(nums); // 33,22,11

sort()会按照升序重新排列数组元素,即最小的值在前面,最大的值在后面。sort()会在每一项上调用 String()转型函数,然后比较字符串来决定顺序,即使数组的元素都是数值,也会先把数组转换为字符串再比较、排序例如:

let nums = [5, 8, 12];
nums.sort();
console.log(nums); // 5, 8, 12

调用 sort()会按照这些数值的字符串形式重新排序,字符串"15"在字符串"10"的前头,所以15还是会排到10前面。

比较函数接收两个参数,如果第一个参数应该排在第二个参数前面,就返回负值;如果两个参数相等,就返回 0;如果第一个参数应该排在第二个参数后面,就返回正值, 例如

function compare(value1, value2) {
    if (value1 < value2) {
        return -1;
    } else if (value1 > value2) {
        return 1;
    } else {
        return 0;
    }
}

注意 reverse()和 sort()都返回调用它们的数组的引用。

如果数组的元素是数值,或者是其 valueOf()方法返回数值的对象(如 Date 对象),这个比较函数还可以写得更简单,因为这时可以直接用第二个值减去第一个值:

function compare(value1, value2){
    return value2 - value1;
}

操作方法

concat()方法可以在现有数组全部元素基础上

创建一个新数组。它首先会创建一个当前数组的副本,然后再把它的参数添加到副本末尾,最后返回这个新构建的数组。如果传入一个或多个数组,则 concat()会把这些数组的每一项都添加到结果数组。如果参数不是数组,则直接把它们添加到结果数组末尾。例如:

let num1 = ["1", "2", "3"];
let num2 = num1.concat("4", ["5", "6"]);
console.log(num1); // ["1", "2","3"]
console.log(num2); // ["1", "2", "3", "4", "5", "6"]

slice()用于创建一个包含原有数组中一个或多个元素的新数组。slice()方法可以接收一个或两个参数:返回元素的开始索引和结束索引。如果只有一个参数,则 slice()会返回该索引到数组末尾的所有元素。如果有两个参数,则 slice()返回从开始索引到结束索引对应的所有元素,其中不包含结束索引对应的元素,slice方法不影响原始数组。

let num = ["1", "2", "3", "4", "5"];
let num1 = num.slice(1);
let num2 = num.slice(1, 4);
console.log(num1); // 2,3,4,5
console.log(num2); // 2,3,4