目录
一、 slice() 和 splice() 方法
1、slice() 方法
2、splice() 方法
(1)、删除
(2)、插入(添加)
(3)、替换
二、手写 slice() 和 splice() 方法(中高级前端面试题)★★★★★
1、手写 slice() 方法
2、手写 splice() 方法
参考:https://blog.csdn.net/mChales_Liu/article/details/103201171#10%E3%80%81slice()%C2%A0%E6%96%B9%E6%B3%95
var colorArr = ["red", "blue", "black", "gray", "green"];
var colorArr2 = colorArr.slice(1);
var colorArr3 = colorArr.slice(1,3);
console.log(colorArr); // ["red", "blue", "black", "gray", "green"]
console.log(colorArr2); // ["blue", "black", "gray", "green"]
console.log(colorArr3); // ["blue", "black"]
splice() 方法有多种用法,对于数组的项,splice() 方法可以:删除、插入 与 替换。
var colorArr = ["red", "blue", "black"];
var colorArr2 = colorArr.splice(0, 2);
console.log(colorArr); // ["black"]
console.log(colorArr2); // ["red", "blue"]
var colorArr = ["red", "blue", "black"];
var colorArr2 = colorArr.splice(1, 0, "yello", "orange");
console.log(colorArr); // ["red", "yello", "orange", "blue", "black"]
console.log(colorArr2); // []
var colorArr = ["red", "blue", "black"];
var colorArr2 = colorArr.splice(1, 1, "yello", "orange");
console.log(colorArr); // ["red", "yello", "orange", "black"]
console.log(colorArr2); // ["blue"]
Array.prototype.mySlice = function() {
var arr = [], i = 0, o = 0, len = this.length,
one = parseInt(arguments[0]),
two = parseInt(arguments[1]);
var re = /^[+]{0,1}(\d+)$/;
if(arguments.length){
if(!(re.test(arguments[0]) || re.test(arguments[1]))){
throw new Error("Parameter input error");
}
if(one > len || two == 0) return []; // 只有一个参数并且大于数组长度时返回空数组
if(one >= 0) {// 第一个参数是正数的时候
i = one;
} else {// 第一个参数是负数的时候
i = len + one;
}
if(two){ // 如果有第二个参数
if(two > len){// 如果第二个参数大于数组长度时,len 等于数组的长度
len = len;
} else if(two >= 0){// 第二个参数为正数的时候
len = two;
} else {// 第二个参数为负数的时候
len = len + two;
}
};
};
for(i; i < len; i++){
arr[o] = this[i];
o++;
}
return arr;
}
Array.prototype.mySplice= function(){
// 更新原数组
function changeThis(_this, _content){
var len = content.length > _this.length ? content.length : _this.length;
for(var i=0; i 2){
for(var i=2;i0){
// 获取删掉的数据
resultArr = arr.slice(one, q);
// 更新原数组的数据
content=arr.slice(0,one).concat(content,arr.slice(q,arr.length));
changeThis(arr, content);
return resultArr;// 替换掉的数据
}
}
}