reverse
reverse不是排序方法,它只是数组颠倒方法,可以将数组的顺序颠倒过来。
// 书中的例子,只是作为反向排序讲解,不够全面
let values = [1, 2, 3, 4, 5];
values.reverse();
console.log(values); // [5,4,3,2,1]
let numbers = [5,1,2,6,3];
numbers.reverse();
console.log(numbers); // [3, 6, 2, 1, 5]
let chars = ['c','b','d','a','w'];
chars.reverse();
console.log(chars); // ["w", "a", "d", "b", "c"]
let objs = [{a:1}, {a:5}, {a:3}];
objs.reverse();
console.log(objs); // [{a:3},{a:5},{a:1}]
sort
sort()方法可以接收一个比较函数,用于判断哪个值应该排在前面。比较函数接收两个参数,如果第一个参数应该排在第二个参数前面,就返回负值;如果两个参数相等,就返回0;如果第一个参数应该排在第二个参数后面,就返回正值。
let values = [0, 1, 5, 10, 15];
values.sort(); // 不传比较函数出来的结果是不正常的
console.log(values); // 0,1,10,15,5
let values = [15, 1, 10, 5, 0];
values.sort(function (value1, value2) {
if (value1 < value2) {
return -1;
}
else if (value1 > value2) {
return 1;
}
return 0;
});
console.log(values); // 0,1,5,10,15
//使用箭头函数简写
let values = [15, 1, 10, 5, 0];
values.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
console.log(values); // 0,1,5,10,15
//最简单的方法
let values = [15, 1, 10, 5, 0];
values.sort((a, b) => a - b);
console.log(values); // 0,1,5,10,15
concat
concat()方法可以在现有数组全部元素基础上创建一个新数组。它首先会创建一个当前数组的副本,然后再把它的参数添加到副本末尾,最后返回这个新构建的数组。
let colors = ["red", "green", "blue"];
let colors2 = colors.concat("yellow", ["black", "brown"]);
console.log(colors); // ["red", "green","blue"]
console.log(colors2); // ["red", "green", "blue", "yellow", "black", "brown"]
//不能添加第二层的数据
let colors = ["red", "green", "blue"];
let colors2 = colors.concat("yellow", ["black", "brown"],"aaa",["bbb",'ccc', ['a','b',['c']]]);
console.log(colors2); //["red", "green", "blue", "yellow", "black", "brown", "aaa", "bbb", "ccc", Array(3)]
slice
slice()用于创建一个包含原有数组中一个或多个元素的新数组。slice()方法可以接收一个或两个参数:返回元素的开始索引和结束索引。如果只有一个参数,则 slice()会返回该索引到数组末尾的所有元素。如果有两个参数,则slice() 返回从开始索引到结束索引对应的所有元素,其中不包含结束索引对应的元素。
let colors = ["red", "green", "blue", "yellow", "purple"];
let colors2 = colors.slice(1);
let colors3 = colors.slice(1, 4);
console.log(colors2); // ["green", "blue", "yellow", "purple"
console.log(colors3); // ["green", "blue", "yellow"]
console.log(colors); // ["red", "green", "blue", "yellow", "purple"]
splice
splice()是个非常强大的方法,可删除,替换,增加(需非常熟悉),会改变原数组。
删除需要给 splice() 传2个参数:要删除的第一个元素的位置和要删除的元素数量。从原数组中删除任意多个元素,并返回一个数组,返回的数组包含删除的项。比如splice(0, 2) 会删除原数组前两个元素,并返回一个数组,数组中包含前两个已删除的项。
let colors = ["red", "green", "blue"];
let removed = colors.splice(0,1); // 删除第一项,并将第一项返回
console.log(colors); // ["green", "blue"]
console.log(removed); // ["red"]
let colors = ["red", "green", "blue"];
let removed = colors.splice(-3);
console.log(colors); // []
console.log(removed); // ["red", "green", "blue"]
let colors = ["red", "green", "blue"];
let removed = colors.splice(-3,2);
console.log(colors); // ["blue"]
console.log(removed); // ["red", "green"
插入需要给 splice() 传3个参数:开始位置、0(要删除的元素数量)和要插入的元素,可以在数组中指定的位置插入元素。第三个参数之后还可以传第四个、第五个参数,乃至任意多个要插入的元素。比如,splice(2, 0, “red”, “green”) 会从数组位置2开始插入字符串 “red” 和 “green” 。
let colors = ["red", "green", "blue"];
let removed = colors.splice(1, 0, "yellow", "orange"); // 在位置1插入两个元素
console.log(colors); // ["red", "yellow", "orange", "green", "blue"]
console.log(removed); // []
替换splice() 在删除元素的同时可以在指定位置插入新元素,样要传入3个参数:开始位置、要删除元素的数量和要插入的任意多个元素。要插入的元素数量不一定跟删除的元素数量一致。比如,splice(2, 1, “red”, “green”) 会在位置2删除一个元素,然后从该位置开始向数组中插入 “red” 和 “green”。
let colors = ["red", "green", "blue"];
let removed = colors.splice(1, 1, "red", "purple"); // 插入两个值,删除一个元素
console.log(colors); // ["red", "red", "purple", "blue"]
console.log(removed); // ["green"]