数组方法实现(七)————数组方法splice()

splice()方法

splice(),主要用途是向数组中部插入项。

  1. 删除: 可以删除任意数量的项
    只需指定2个参数:要删除的第一项的位置和要删除的项数。

  2. 插入:可以向指定的位置插入任意数量的项
    只需提供三个参数:起始位置、0(要删除的项数)、要插入的项。

  3. 替换: 可以向指定位置插入任意数量的项,且同时删除任意数量的项。
    只需指定三个参数:使其位置, 要删除的项数和要插入的任意数量的项。

注: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;
    };

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值