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

最新文章

  1. sql server 2012 数据引擎任务调度算法解析(下)
  2. 产经新闻:公交WiFi这次能扛多久
  3. winform打开子窗体后,在子窗体中刷新父窗体,或者关闭子窗体刷新父窗体
  4. Android-MediaRecorder-音频录制-警告-W/MediaRecorder(13811): mediarecorder went away with unhandled events
  5. 161111、NioSocket的用法(new IO)
  6. u-boot board_uart_init流程
  7. 对于jdk jre jvm的简单认识
  8. 【回忆1314】回忆之placeholder
  9. MySQL命令行数据操作使用心得(总结版)
  10. DZY Loves Partition
  11. js面向对象的理解
  12. HDU 1074 Doing Homework【状压DP】
  13. Codeforces 408D Long Path (DP)
  14. [转帖]知乎专栏:正确使用 Docker 搭建 GitLab 只要半分钟
  15. pycharm如何在debug的时候动态执行python语句
  16. spark运行wordcount程序
  17. 每日scrum(5)
  18. 【嵌入式】——makefiles
  19. Java开发者应该列入年度计划的5件事
  20. python流行的原因

热门文章

  1. mongodb数据库集合操作
  2. Oracle GoldenGate 详解
  3. 稳定sqlplan方法
  4. easyui学习笔记3—在展开行内的增删改操作
  5. [EffectiveC++]item34:区分接口继承和实现继承
  6. 浅谈SAP Cloud for Sales 自动化
  7. 使用jMeter构造逻辑上有依赖关系的一系列并发请求
  8. 最详细的Vue Hello World应用开发步骤
  9. Vue收藏资料
  10. JavaScript的DOM_操作表格