splice()方法功能非常多,可以说是一个“多功能”方法。
项的替换
splice()方法用来替换数组中的指定项。
比如数组:
var arr = ["A", "B", "C", "D", "E", "F", "G"];
我们调用 arr.splice()方法,它在英语中是“拼接”的意思:
arr.splice(3 , 2 , "X" , "Y" , "Z");
这条语句的意思是:从数组 arr 的下标为 3 的项开始删除连续的 2 项,并在此插入新的项"X","Y","Z"。
即这条语句删除了一些项,又增加了一些项,实现了项的替换。输出 arr:
console.log(arr); // ["A", "B", "C", "X", "Y", "Z", "F", "G"]
在指定位置插入项
调用 splice()方法,如果不删除任何项(即删除的项的个数为 0)仅插入新项,此时即可实现在指定的位
置插入项的功能。比如:
var arr = ["A", "B", "C", "D"];
arr.splice(2 , 0 , "X" , "Y" , "Z");
console.log(arr); // ["A", "B", "X", "Y", "Z", "C", "D"]
当需要在数组的非头尾位置插入项,一定要想起使用 splice()函数。
删除项
使用 splice()方法时,如果删除一些项,但是不插入任何新项,此时就实现了删除数组项的功能。比如:
var arr = ["A","B","C","D","E","F","G"];
arr.splice(2,4); // 没有设置需要插入的项,仅删除 4 项
console.log(arr); // ["A", "B", "G"]
特别的,如果我们没有指定需要删除项的个数,此时将删除从开始项开始的所有项:
var arr = ["A","B","C","D","E","F","G"];
arr.splice(2); //从下标为 2 的项开始删除所有项
console.log(arr); // ["A", "B"]
语句 arr.splice(2)并没有指定需要删除多少项,所以它将删除从下标为 2 的项开始的所有后续项。
slice() 方法
一个大数组中,如果我们想取其中的一部分,即提炼出它的“子数组”,要使用 slice()方法。注意,splice()
方法和 slice()方法拼写非常类似,但功能截然不同,参数的意义也截然不同。例如:
var arr1 = ["A","B","C","D","E","F","G"];
var arr2 = arr1.slice(3,5);
console.log(arr1); // ["A", "B", "C", "D", "E", "F", "G"]
console.log(arr2); // ["D", "E"]
语句 arr.slice(3,5)表示从 arr 数组的下标为 3 的项开始提取,到下标为 5 的项结束,但不包括下标为 5这项,将提取出的项组成新的数组返回。即 arr 数组的下标为 3、4 的两项将被提取为数组 arr2,而 arr1 自身
不会有任何变化。
从控制台输出可以看出,slice()函数不会改变原数组,这和 splice()截然不同!splice 无论进行何种操
作,一定会改变原数组的。
slice 的公式如下:
arr.slice(a , b);
数字 a 表示从下标为几的项开始截取,而 b 表示到下标为几的项结束,但不包括这项。因为 slice 返回的
子数组,不包括下标为 b 的项,所以子数组的长度是 b - a。比如上例,arr.slice(3,5)得到的数组就是只有
2 项,参数 5-3 也等于 2。
slice()如果不提供第二个参数,则表示从指定项开始,提取所有后续所有项作为子数组,比如:
var arr1 = ["东", "西", "南", "北"];
var arr2 = arr1.slice(1);
console.log(arr2); // ["西", "南", "北"]
特别的,slice()方法的参数允许为负数,表示数组的倒数第几项,比如:
var arr1 = ["A", "B", "C", "D", "E", "F", "G"];
var arr2 = arr1.slice(-4);
console.log(arr2); // ["D", "E", "F", "G"]
程序表示截取数组的倒数 4 项作为新的数组。注意,我们不要理解为“从下标为-4 的项开始”,因为数组
的下标只有正数没有负数,所以这里的符号只是一个语法符号,表示倒数第 4 项。倒数的时候,个数从 1 开始。
concat() 方法
使用 concat()函数可以合并多个数组,例如:
var arr1 = [1, 2, 3, 4];
var arr2 = [5, 6, 7, 8];
var arr3 = [9, 10, 11];
var arr = arr1.concat(arr2 , arr3);
console.log(arr); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
concat()方法必须由某一个数组调用,参数可以是无限多个数组,这些数组将按顺序合并为 1 个数组。数
组 arr1 不会被改变。