SOURCE

// 模拟实现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 命令行工具 X clear

                    
>
console