<!DOCTYPE html>
<
html
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
title
>Title</
title
>
</
head
>
<
body
>
<
script
>
/*
* splice(start, deleteCount, data1, data2, data3...)
* */
var arr = ['a', 'b', 'c', 'd', 'e'];
//1, 3
// [8,6,4]
//['a',8,6,4]
//arr.splice(-5);
//console.log(arr);
function arrSplice(data, start, deleteCount) {
// 如果start不是数字,或不能转成数字,start默认就为0
if (isNaN(start)) {
start = 0;
}
start = Number(start);
// 如果start是负数
if (start <
0
) {
start
=
data
.length + start;
}
if (start < 0) {
start
=
0
;
}
// 如果deleteCount没传
if (deleteCount == undefined) {
deleteCount
=
data
.length - start;
}
/*
* 1. 准备一个空的数组,用于存放最后的结果
* 2. 循环源数组
* 1. 得到当前循环过程中的下标
* 2. 把这个下标和start做比较
* 1. 如果当前下标小于start,则把当前数组添加到新数组中
* 2. 否则
* 1. 是否有新增数据
* 1. 如果有新在数据,则把新增数据添加到新数组中
* 2. 否则,如果deleteCount大于0,忽略这个数据,并对deleteCount--
* 否则,把当前数据添加到新数组中
* */
var newArr = [];
//新增数据
var newData = [];
if (arguments.length > 3) {
for (var i=3; i<
arguments.length
; i++) {
// newData.push(arguments[i]);
newData[newData.length] = arguments[i];
}
}
for (var
i
=
0
; i<data.length; i++) {
if (i < start) {
// newArr.push(data[i]);
newArr[newArr.length] = data[i];
} else {
if (newData.length) {
//有新增数据的
//
newArr
= newArr.concat(newData);
for (var
j
=
0
; j<newData.length; j++) {
newArr[newArr.length] = newData[j];
}
newData.length
=
0
;
}
if (deleteCount > 0) {
deleteCount--;
} else {
// newArr.push(data[i]);
newArr[newArr.length] = data[i];
}
}
}
data = newArr;
console.log(data);
}
</
script
>
</
body
>
</
html
>