JS中数组方法的封装之slice
slice方法的功能
//    1) : 数组的截取
//    2) :slice(m,n): 从数组索引m开始,截取到索引n,但是不包含n;[前包后不包]
//    slice(m) : 从索引m开始,截取到末尾;
//    slice():数组的克隆  slice(0);
//    // 索引负数: 让当前length+负数;
//    3) : 返回值是截取的数组
//    4) : 原有数组不发生改变;
/**
* 首先:先分清楚slice有几种情况,slice的思想
* 传的参数可以是其他类型的数据,只要能转成有效数字就可以(所以参数的类型要求比较灵活)
* 其次,要注意的是只有第一个和第二个参数为有效参数,第三个及第三个以后的参数将对截取的结果不产生影响
*
* 对参数的处理:
* 我们暂且把第一个参数给变量start,第二个参数给变量end
* 1.当参数1、参数2同时为undefined或者其中一个为undefined的情况下
* 情况1:参数1为undefined时,直接取start=0
* 情况2:参数2为undefined时,直接取end=this.length
*
* 2.当参数1和参数2都不是undefined的情况下
* 情况1:当第一个参数为负数的情况下:start取this.length与参数中的最大值;当第一个参数大于等于0的情况下,start直接取自己
* 情况2:当第二个参数为负数的情况下,end取this.length与end的和;当参数大于0,end取this.length与end中的最小值
*
* 对区间长度的处理:设置size=end-start
* 情况1:当区间长度小于等于0的情况下,直接返回空数组
* 情况2:当区间长度大于0的情况下,不管对于字符串还是数组,创建一个长度为size的数组,依次从start到end,赋值给新的数组,将新数组返回
*
* @type {Array}
*/
附上代码:
Array.prototype.mySlice = function (start,end) {
        var newAry = [];//创建一个变量用来接收返回值
        var len = this.length;//变量接收当前数组的长度
        //先对参数为undefined的情况进行处理
        start = (start !== undefined)?start:0;
        end = (end !== undefined)?end:len;
        //对于参数的处理,采用三目运算符,由于在与0判断的时候自动转换为数字再进行判断,所以直接与0比较即可
        start = (start>=0)?start:Math.max(0,len+start);
        end = (end>=0)?Math.min(end,len):len+end;
        var size = end - start;//用一个变量接收截取区间的长度
        if(size>0){
            //当区间长度大于0时,实例化一个长度为size的数组,并赋值给newAry
            newAry = new Array(size);
            //遍历数组,将当前数组[start,end)区间上的值依次赋值给newAry
            for(var i = 0;i<size;i++){
                newAry[i] = this[i+start];
            }
        }else{
            //当区间长度小于等于0的情况下,直接返回空数组
            return newAry;
        }
        return newAry;
    };
												
											JS中数组方法的封装之slice的更多相关文章
- js中数组方法大全
		
js数组方法大全 一:前言 我们在学到js中数组的时候,我们会接触到js中数组的一些方法,这些方法对我们来说,可以很遍历的达到我们想要的结果,但是因为方法比较多,有些方法也不常用,可能会过一段时间就会 ...
 - JS中数组方法小总结
		
1.array.concat(item……) 返回:一个新数组 该方法产生一个新数组,它包含一份array的浅复制,并把一个或多个参数item附加在其后.如果参数item是一个数组,那么它的每个元素会 ...
 - js中数组方法及分类
		
数组的方法有很多,这里简单整理下常用的21种方法,并且根据它们的作用分了类,便于记忆和理解. 根据是否改变原数组,可以分为两大类,两大类又根据不同功能分为几个小类 一.操作使原数组改变 1.数组的 ...
 - JavaScript -- 时光流逝(二):js中数组的方法
		
JavaScript -- 知识点回顾篇(二):js中数组的方法 1. 数组 (1)定义数组,数组赋值 <script type="text/javascript"> ...
 - js中数组去重的几种方法
		
js中数组去重的几种方法 1.遍历数组,一一比较,比较到相同的就删除后面的 function unique(arr){ ...
 - js中split()方法得到的数组长度
		
js 中split(",")方法通过 ”,“ 分割字符串, 如果字符串中没有 “,” , 返回的是字符串本身 var str = “abc”://分隔符个数为0 var newSt ...
 - js中数组增删查改unshift、push、pop、shift、slice、indexOf、concat、join
		
js中数组增删查改unshift.push.pop.shift.slice.indexOf.concat.join
 - js中数组去重方法及性能对比
		
js中数组的 数组去重 常用的数组去重方法以及效率分析: 首先我们先构建一个数组,主要是用于进行去重实验,我们主要实验的量级为1000,10000,100000,500000.具体的生成数组的方法如下 ...
 - JS中数组的介绍
		
一.数组: 一组数据的集合: 二.JS中数组的特点: 1.数组定义时无需指定数据类型: 2.数组定义时可以无需指定数组长度: 3.数组可以存储任何类型的数据: 4.一般是相同的数据类型: 三.数组的创 ...
 
随机推荐
- Thread调用SaveFileDialog
			
public void ThreadSaveFileDialog(string sourceFileName) { Thread importThread = new Thread(new Param ...
 - 快速替换dll命名空间 z
			
Step1:使用ildasm将代码反编译成il中间语言. 名字存贮为你想要的名字. Step2:用记事本打开il文件全局替换命名空间. Step3:使用ilasm将il文件编译成dll 按下回车即可生 ...
 - MyEclipse中关于JRE System Library、Web App Libraries的疑惑
			
简要说明一下:其实,这三个都是jar包的存放集合. 1.JRE System Library主要存放J2SE的标准jar,一般不需要调整. 2.Referenced Libraries是存放第三方的j ...
 - hashcode方法 简析
			
package com.ycgwl; import java.util.HashMap; class People{ private String name; private int age; pub ...
 - [EffectiveC++]item36:绝不重新定义继承而来的non-virtual函数
 - LDA相关论文汇总
			
转:http://blog.csdn.net/pirage/article/details/9467547 LDA理论 David M. Blei, Andrew Y. Ng, and Michael ...
 - Java 中的引用
			
JVM 是根据可达性分析算法找出需要回收的对象,判断对象的存活状态都和引用有关. 在 JDK1.2 之前这点设计的非常简单:一个对象的状态只有引用和没被引用两种区别. 这样的划分对垃圾回收不是很友好, ...
 - bootstrap Switch 的一个坑点
			
在bootstrap的modal点开的时候改变bootstrapSwitch的状态的时候,会出现第一次打开modal,switch没有变化,第二次以后打开modal才会改变,这个问题找了好久没有找到答 ...
 - MATLAB入门学习(四)
			
今天我们开始学编程啦~ 点击左上角的这个进入编程界面 这是新建新的.m文件,也就是matlab命令文件, 一般命令文件不带输入和输出的参数,只是一些命令的组合,带有输入输出参数的文件是函数文件~ 下面 ...
 - UIView的多重属性
			
1)几何属性: 2)位图属性: