数组的方法:slice和splice
-
slice可以从数组中提取指定元素,需要两个参数,该方法不会改变原数组,会将索引到的元素封装到一个新的数组中返回
1.截取开始位置的索引,包括开始索引的元素。
2.截取结束的索引,不包括结束的索引
- 第二个参数可以省略不写,此时会截取从开始索引往后的所有元素
- 索引可以传递一个负值,,表示从后往前计算,-1表示最后一个,-2表示倒数第二个
var arr = ["张三","李四","小明"];
var result = arr.slice(0,2); //索引从0开始,到2结束,一共两个元素,不包含索引为2的元素并返回
var result2 = arr.slice(2); //截取索引为2后面的所有元素
//传递的索引为负数
var result3 = arr.slice(1,-2); //表示从索引为1的元素开始截取,到倒数第二个结束,不包含倒数第二个元素。
-
splice删除数组中指定的元素,会影响到原数组,并将被删除的元素作为返回值返回。
参数,第一个表示开始位置的索引,第二个表示删除的数量,第三个及以后,可以传递一些新的元素,这些元素将会自动插入到开始位置索引前面
- splice(); 可以删除指定元素、替换指定元素、在指定位置插入元素
var arr = ["张三","李四","小明"];
var result = arr.aplice(0,2); //从索引为0的元素开始,删除2个元素,包括索引为0的元素
var result2 = arr.aplice(0,1,"小红"); //删除索引为0开始的一个元素,用小红来代替被删除逇元素
var reault = arr.splice(1,0,"小红"); //删除出索引为0的元素后的零个元素,也就是不删除,在索引为1的元素前面插入新元素“小红”。
console.log(result);
**练习:**去除数组中重复的数组
var arr = [1,2,3,4,2,5,1,3];
//去除数组中的每一个元素
for(i=0;i<arr.length;i++){
//里面的循环要从索引为i的元素的下一个元素开始遍历
for(j=i+1;j<arr.length;j++){
//判断两个元素的值是否相等
if(arr[i] == arr[j]){
//如果相等则证明出现了重复的元素,则删除j对应的元素
arr.splice(j,1);
}
}
}
console.log(arr); //因为arr.splice();会将被删除的元素作为返回值返回,所以输出的时候应当输出删除重复元素后的数组,而不是被删除的元素
上面的代码中,原数组中如果出现连续两个相同的元素,会出现错误:连续相同元素的第一个元素被对比删除后,后面的元素会自动填充空位,所以连续相同元素的第二个元素就填补了被删除的第一个元素的空位,用来对比的元素会跳过填充的这个位置,导致漏掉重复元素没有删除,针对以上问题进行了优化,代码如下:
var arr = [1,2,3,4,2,5,1,3];
//去除数组中的每一个元素
for(i=0;i<arr.length;i++){
//里面的循环要从索引为i的元素的下一个元素开始遍历
for(j=i+1;j<arr.length;j++){
//判断两个元素的值是否相等
if(arr[i] == arr[j]){
//如果相等则证明出现了重复的元素,则删除j对应的元素
arr.splice(j,1);
//使j自减
j--; //和填充上来的元素再进行一次对比
}
}
}
console.log(arr); //因为arr.splice();会将被删除的元素作为返回值返回,所以输出的时候应当输出删除重复元素后的数组,而不是被删除的元素