JavaScript数组中splice方法解析与重构
splice
splice包括 开始,删除数量,添加的元素们,会返回被删除元素所组成的新数组
arr.splice();不填时,创建一个空数组返回
arr1=arr.splice(3);代表从下标是三开始删除到数组尾部,并将删除的元素放在新数组中返回
arr1=arr.splice(-1);可以有负整数,从后往前,从倒数第一位删除到尾部
arr1=arr.splice(3,1);从下标3开始删除一个元素,并且返回这个被删除的元素组成的新数组
arr1=arr.splice(-3,2);从倒数第三位开始删除两个
arr1=arr.splice(0,0,0);在数组的头部添加一个0,返回一个空数组
arr1=arr.splice(2,1,10);从下标为2的位置开始删除一个元素,并替换成10,返回被删除的元素
arr1=arr.splice(2,0,10,11);从下标为2的位置开始插入10,11,并返回一个空数组
splice的重构
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
function splice(arr, start, count) {
if (start === undefined) return [];
//如果没有参数start,则返回空数组
if (start < 0) start = arr.length + start;
//如果参数start为负数时,将start加上原数组的长度赋值给start
if (count === undefined) count = arr.length;
//如果没有参数count,则将数组长度赋给count
var len = arr.length;
//定义变量len,将原数组长度赋给他
var arr1 = [];
//创建空数组arr1
for (var i = start; i < len; i++) {
//从要删除的元素下标开始遍历数组
if (i < start + count) arr1[arr1.length] = arr[i];
//当前元素下标小于要删除的元素后面第一个元素的下标,将原数组相应下标元素放入arr1
else arr[i - count] = arr[i];
//否则将数组的相应下标元素向前移动count个位置
}
arr.length -= count > len - start ? len - start : count;
//如果count的结果比len-start大,返回arr.length -=len - start
//如果count的结果比len-start小,返回arr.length -=count
// arr.length-=count>start ? count-start : count;
len = arr.length - 1;
//将数组最后一个元素的下标给len
// 方法一
/* for (var j = len + arguments.length - 3; j >= start; j--) {
//从总下标长度(len + arguments.length - 3)递减遍历
if (j >= arguments.length - 3 + start)
//如果当前下标大于添加元素的下标与start的和
arr[j] = arr[j - (arguments.length - 3)];
// 使arr当前元素往后移动(arguments.length - 3)位
else arr[j] = arguments[3 + j - start];
// 否则使arr当前元素等于arguments中要添加的元素
} */
// 方法二
for (var j = len; j >= start; j--) {
//从原数组最后一个元素的下标开始往前,每个元素向后移动(arguments.length - 3),直到start为止
arr[j + arguments.length - 3] = arr[j];
//从后往前,将start之后的原数组中的元素放入arr中
}
for (var s = start; s < start + arguments.length - 3; s++) {
// 从要添加元素的下标开始到要添加的最后一个元素添加后的下标为止
arr[s] = arguments[s - start + 3];
// 将要添加的元素挨个放入已经腾出位置的数组中
}
return arr1;
}
var arr1 = splice(arr, 2, 3);
console.log(arr1, arr);