**
slice()
**
slice()可以理解为截取数组的方法,参数可以是一个或者两个。
当slice()的参数有两个的时候,第一个参数表示开始截取的位置,第二个参数表示截取结束的位置,把起始位置之间的值取出来变成数组作为返回值(包括开始位置的值,不包括结束位置的值),因此slice()是不会改变原数组的。
当slice()的参数只有一个的时候,参数表示开始截取的位置,然后从这个位置把后面的值全部截取下来。
看例子:
var array=[0,1,2,3,4,5,6];
console.log(array); //[0, 1, 2, 3, 4, 5, 6]
var array2=array.slice(3,6); //两个参数
console.log(array); //[0, 1, 2, 3, 4, 5, 6]
console.log(array2); //[3, 4, 5]
var array2=array.slice(3); //一个参数
console.log(array); //[0, 1, 2, 3, 4, 5, 6]
console.log(array2); //[3, 4, 5, 6]
特别的是,slice()的参数可以是负数,如果参数是负数要先转换为正数,例如slice(-3),转换方法有两个:
1,把参数值加上数组长度得到位置;
2,-3即数组倒数第三个位置(数组最后一个数的位置是-1);
看例子:
var array=[0,1,2,3,4,5,6];
console.log(array); //[0, 1, 2, 3, 4, 5, 6]
var array2=array.slice(-2); //一个参数
console.log(array); //[0, 1, 2, 3, 4, 5, 6]
console.log(array2); //[5, 6]
var array2=array.slice(-4,-2); //两个参数
console.log(array); //[0, 1, 2, 3, 4, 5, 6]
console.log(array2); //[3, 4]
最后一种情况就是,slice()的开始位置等于或者大于结束位置,这时候返回的会是一个空数组。
看例子:
var array=[0,1,2,3,4,5,6];
console.log(array); //[0, 1, 2, 3, 4, 5, 6]
var array2=array.slice(6,3);
console.log(array); //[0, 1, 2, 3, 4, 5, 6]
console.log(array2); //[]
**
splice()
**
虽然splice()只比slice()多了一个字母,但是splice()的功能强大了很多,它可以根据参数的不同,分别实现删除,插入,替换操作。
话不多说,下面一一举例:
删除:
这时候splice()有两个参数,第一个参数代表开始删除的位置,第二个参数代表要删除的个数,要注意的是,splice()会改变原数组的值,原数组保留的是删除后的数组,然后把删除掉的项组成一个新数组作为返回值。
var array=[0,1,2,3,4,5,6];
console.log(array); //[0, 1, 2, 3, 4, 5, 6]
var array2=array.splice(3,2);
console.log(array); //[0, 1, 2, 5, 6]
console.log(array2); //[3,4]
插入
这时候splice()的参数不确定,但是至少会有两个参数,跟删除操作类似,第一个参数代表插入位置,第二个参数代表删除个数,由于插入操作不用删除,所以第二个参数是0。然后接下来的第三个第四个之后的参数,全部作为插入值插进原数组里面,由于没有删除掉任何项,所以返回值会是一个空数组。如果没有插入值,则原数组不变,返回值依旧为空数组。
var array=[0,1,2,3,4,5,6];
console.log(array); //[0, 1, 2, 3, 4, 5, 6]
var array2=array.splice(3,0,'a','b');
console.log(array); //[0, 1, 2, "a", "b", 3, 4, 5, 6]
console.log(array2); //[]
替换
因为替换可以理解为先删除再插入,所以替换操作是删除+插入的结合。第一个参数代表开始替换的位置,第二个参数代表删除个数,然后接下来的第三个第四个之后的参数,全部作为替换值从指定位置插进原数组里面。同样地,返回值会是原数组中删除掉的项,要注意的是,删除项个数跟插入项个数互不影响,不一定要相等。
var array=[0,1,2,3,4,5,6];
console.log(array); //[0, 1, 2, 3, 4, 5, 6]
var array2=array.splice(3,2,'a','b','c');
console.log(array); //[0, 1, 2, "a", "b", "c", 5, 6]
console.log(array2); //[3,4]
同样地,splice()的参数也一样可以是负数,具体跟slice()方法一样,这里就不再重复了。
小结:
不同点:
1.slice()不会改变原数组的值,而splice()会改变原数组的值。
2.slice()是先复制原数组的值作为备份,然后在上面进行操作,不影响原数组的值;splice()是直接在原数组上进行操作,所以影响了原数组的值。
3.splice()的功能远远大于slice(),因为slice()的结果可以由splice()方法的删除操作得出。
相同点:
2.slice()和splice()都会返回一个新数组,组成新数组的项都是从原数组中去掉的项(对slice()方法来说是指在备份数组中去掉的值)。