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

原文地址:https://www.cnblogs.com/kjz-jenny/p/9338853.html

时间: 2025-01-09 08:18:47

JS中数组方法的封装之slice的相关文章

js中数组去重的几种方法

js中数组去重的几种方法         1.遍历数组,一一比较,比较到相同的就删除后面的                 function unique(arr){                         for(var i=0;i<arr.length;i++){                                 for(var j=i+1;j<arr.length;j++){                                         if(ar

js中数组增删查改unshift、push、pop、shift、slice、indexOf、concat、join

js中数组增删查改unshift.push.pop.shift.slice.indexOf.concat.join 原文地址:https://www.cnblogs.com/mahmud/p/10301590.html

JS数组去重,js中数组(Array)的排序(sort)

JS数组去重 var ddd = [1,2,4,5,2, 222,1,5,6]; var uq = {}; var rq = []; for(var i=0; i<9; i++){ if(!uq[ddd[i]]){ uq[ddd[i]] = true; rq.push(ddd[i]); } } return rq; js中数组(Array)的排序(sort)注意事项 var arrDemo = new Array(); arrDemo[0] = 10; arrDemo[1] = 50; arrD

js中数组Array的操作

JS中数组有很多操作,作为前端多多少少知道点,但每次要用时都需要去百度,有点麻烦,所以在这儿做个备忘,简单总结些平时最常用的数组操作. shift:删除原数组第一项,并返回删除元素的值: var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] b:1 注:如果数组为空则返回undefined unshift:将参数添加到原数组开头,并返回数组的长度 var a = [1,2,3,4,5]; var b = a.unshift(-2,-1); /

js中Date 方法

Date (对象) Date 对象能够使你获得相对于国际标准时间(格林威治标准时间,现在被称为 UTC-Universal Coordinated Time)或者是 Flash 播放器正运行的操作系统的时间和日期.要使用Date对象的方法,你就必须先创建一个Date对象的实体(Instance). Date 对象必须使用 Flash 5 或以后版本的播放器. Date 对象的方法并不是静态的,但是在使用时却可以应用于所指定的单独实体. Date 对象的方法简介: ·getDate | 根据本地时

关于JS中的方法是否加括号的问题

js中的方法什么时候加括号什么时候不加括号呢,我们有时候经常就搞不清楚,记住下面这几点就好理解了. 1.函数做参数时都不要加括号. function fun(a){ alert(a); } function getE(fun,e){ fun(e); } getE(fun,3);//弹出3,这里把函数fun当成实参传入,所以就不用加括号了. 2.函数调用的时候是要加括号的,上面这个例子中getE这个函数调用的时候,不管有没有参数,都是要加括号的. 3.函数作为赋值符号右边的时候,无括号表示的是传递

js中数组操作

var selectedCodeArray = []; var num = $.inArray(值, selectedCodeArray)  //值在数组中的位置 selectedCodeArray.push(值码); selectedCodeArray.splice(num, 1);//从数组中删除 js中数组操作,布布扣,bubuko.com

【转载】JS中bind方法与函数柯里化

原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情况戳这里ECMAScript 5 compatibility table),权威指南上提到在ES3中利用apply模拟该方法的实现(JS权威指南中函数那章), 但无法真实还原该方法, 这也是真bind方法中的有趣特性. (原文这边理解有问题, 这段话的意思如果结合犀牛书上下文的意思, 再结合犀牛书中

js中数组与对象的遍历

数组遍历: 1.js基本的for遍历 2.jquery提供的each函数 ----------------------------------- $.each(array, function(){ alert(this); }); ----------------------------------- 对象遍历: js: --------------------------------------------- for (var k in obj) { alert(obj[k]): } jque