splice()方法
splice(),主要用途是向数组中部插入项。
删除: 可以删除任意数量的项
只需指定2个参数:要删除的第一项的位置和要删除的项数。插入:可以向指定的位置插入任意数量的项
只需提供三个参数:起始位置、0(要删除的项数)、要插入的项。替换: 可以向指定位置插入任意数量的项,且同时删除任意数量的项。
只需指定三个参数:使其位置, 要删除的项数和要插入的任意数量的项。
注:splice()方法始终都返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何项,则返回空数组)。
Array.prototype.copySplice =function() {
var result = [],
len = this.length,
startIndex = arguments[0], //起始位置
deleteNum = arguments[1], //要删除的项数
insertNum = arguments.length - 2, //要插入的项数
leftArr = [],
rightArr = [];
// 第一、第二个参数是负数的话,直接返回空。
if( startIndex < 0 || deleteNum < 0) {
return result;
}
// 1.删除功能——————————————返回删除的数组项以及删除后剩余的数组项
for(var i = 0; i < deleteNum; i++) {
result[i] = this[startIndex + i];
}
for(var i = 0; i < len - deleteNum - startIndex; i++) {
this[startIndex + i] = this[startIndex + deleteNum + i];
}
this.length = len - deleteNum;
// 参数长度小于3个的话,到这里结束,否则继续下面操作
if(insertNum == 0) {
return result;
}
// 2. 插入和替换功能
// 2.1分割数组——————分割点startIndex
for(var i = 0; i < len - deleteNum; i++) {
if(i < startIndex) {
leftArr[leftArr.length] = this[i];
}
else {
rightArr[rightArr.length] = this[i];
}
}
rightArr.length = len - startIndex - deleteNum; // 更新rightArr数组长度
// 2.2 插入数组项
for(var i = 0; i < insertNum; i++) {
leftArr[startIndex + i] = arguments[2 + i];
}
// console.log('leftArr的值是: ' + leftArr + ' rightArr的值是: ' + rightArr);
// 2.3 将左右数组连接起来
for(var i = 0; i < len - deleteNum + insertNum; i++) {
if(i < startIndex + insertNum) {
this[i] = leftArr[i];
}
else {
this[i] = rightArr[i - startIndex - insertNum];
}
}
return result;
};