// 模拟实现splice
// start 小于0 数组个数加上start结果判断 小于0为0 大于等于0正常处理
// 大于0 如果大于了数组长度按数组长度处理
// count 不传值情况 按开始位置到结束位置的个数处理 也就是数组个数减去起始位置
// 小于0按0处理
// end start + count
// 利用slice找到删除的数组为返回值
// 改变数组长度 原数组的长度 - 删除的数组长度 + 传进来的参数长度
// 剩余数组与传进来的参数拼接然后再去改变原数组也就是this
Array.prototype.mySplice = function (start, count, ...data) {
count = count === undefined ? this.length - start : (count < 0 ? 0 : count)
let delArr = [] // 被删除的元素集合也就是返回值
let startIndex = start
if (start < 0) {
startIndex = (this.length + start) <= 0 ? 0 : this.length + start
}
if (start > this.length) {
startIndex = this.length
}
let end = startIndex + count
delArr = this.slice(start, end)
let right = this.slice(end)
let newIndex = startIndex
this.length = this.length - delArr.length + data.length
data.concat(right).forEach(item => {
this[newIndex] = item
newIndex++
})
return delArr
}
const arr1 = [1, 2, 3, 4]
const arr2 = [1, 2, 3, 4]
console.log(arr1.mySplice(1, 20), arr1)
console.log(arr2.splice(1, 20), arr2)
console