zoukankan      html  css  js  c++  java
  • 对js数组的splice实现

    splice是javascript一个自带的数组方法,该方法的主要是用来删除数组中的元素

      start  : 要删除的第一个元素的下标

      deleteCount : 要删除的元素的个数

      如果后面还有参数,则被认为是要替换被删除的元素,不可以是数组,只能是一个个单个的元素

    Array.prototype.splice = function(start,deleteCount){
    
    	var max = Math.max,
    		min = Math.min,
    		delta,
    		element,
    		insertCount = max(arguments.length - 2,0),	//插入的元素的个数,最小为0
    		k = 0,
    		len = this.length,
    		new_len,
    		result = [],	//返回的数组,包函了被删除的元素
    		shift_count;
    
    	start = start || 0;	//如何start不存在,则从0开始
    	if(start < 0){
    		start += len;	//确保start为正数
    	}
    	start = max(min(start,len),0); //确保start为正数
    	deleteCount = max(min(typeof deleteCount === 'number' ? deleteCount : len,len-start),0);	//要删除元素的个数
    	//	1.如果deleteCount存在则deleteCount,否则len
    	//  2.用1的结果与len-start对比,取较小者(因为最大可删除的元素个数为len-start)
    	//  3.用2的结果与0比对,取大者,防止为负数
    	delta = insertCount - deleteCount;		
    	alert(delta);
    	/*
    	 * 1.如果delta大于0,说明数组长度会增加
    	 * 2.如果delat小于0,说明数组长度会减少
    	 */
    	new_len = len + delta;	//数组的新长度
    	while(k < deleteCount){		//这个while循环的作用是保存要返回的result,即保存被删除的元素
    		element = this[start + k];
    		if(element != undefined){
    			result[k] = element;
    		}
    		k++;
    	}
    	shift_count = len - start - deleteCount;	
    	/*
    	 * 1. len-start ,start前端的元素不用动
    	 * 2. 用1的结果再减去deleteCount,是start后面要保留的元素的个数
    	 * 3. 通过shift_count次的遍历,就可以把要保留的元素向前移动,达到删除的目的
    	 */
    	if(delta <= 0){	//在数组长度减少的情况下
    		k = start + insertCount;	//k的初始下标为要保留的元素新的开始下标
    		while(shift_count){
    			this[k] = this[k - delta];	//后面的替换前面的要删除的元素
    			k += 1;
    			shift_count -= 1;
    		}
    		this.length = new_len;
    	}else if(delta > 0){	//在数组长度增加的情况下
    		k = 1;
    		while(shift_count){
    			this[new_len - k] = this[len - k];	//从数组的最后一个元素开始,倒着进行替换
    			k += 1;
    			shift_count -= 1;
    		}
    		this.length = new_len;
    	}
    	for(k = 0; k < insertCount; k+=1){
    		this[start + k] = arguments[k+2];		//插入替换元素
    	}
    	return result;
    };
    

      

  • 相关阅读:
    内部类
    Tomcat 配置安装
    Eclipse转idea改设置
    MyEclipse增强代码补全
    06、自动挂载+超级守护进程+时间同步+tcpwrapper+软硬链接+日志管理
    05、ip划分+网络配置+虚拟化基础+基本路由
    04、rpm+yum+tar解压
    03、磁盘管理+swap分区创建+磁盘配额+自动挂载
    02、用户管理
    01、Linux基础命令
  • 原文地址:https://www.cnblogs.com/jsmiao/p/4626429.html
Copyright © 2011-2022 走看看