浏览器Array不改变原数组方法原理及实现

不改变原数组

1.concat //连接两个数组,返回新的数组
Array.prototype.concat = function(){
    var newArr = [];
    for(var i = 0; i < this.length; i++){
        newArr[newArr.length] = this[i];
    }
    for(var i = 0; i < arguments[0].length; i++){
        newArr[newArr.length] = arguments[0][i];
    }
    return newArr;
}

2.join
//将数组中的元素通过第一个参数连接起来,如果没有传参,默认为逗号连接

Array.prototype.join = function(){
    var str = '';
    var simbol = arguments.length != 0 ? arguments[0] : ',';
    for(var i = 0; i < this.length-1; i++){
        str += this[i] + simbol;
    }
    str += this[i];
    return str;
}

3.slice
//将数组切开,返回切下的部分,参数可以传一个或两个
//两个参数均可以为负数,真实坐标为该负数加数组长度表示的值
//如果只有一个参数,则返回第一个参数代表的真实坐标开始到数组结束的这段数组
//如果该参数大于数组长度,则返回空数组
//如果真实位置小于0,返回整个数组
//如果参数为两个,且第一个小于第二个,返回[第一个参数,第二个参数)所在区间的数字
//如果真实坐标第一个大于等于第二个参数,返回空数组

Array.prototype.slice = function(){
    var arr = [];
    if(arguments.length == 0){
    	return arr;
    }
    var start = arguments[0] < 0 ? arguments[0] + this.length : arguments[0] > this.length ? this.length-1 : arguments[0];
    var end = arguments[1] < 0 ? arguments[1] + this.length : arguments[1] > this.length ? this.length-1 : arguments[1];
    if(start > end){
        return arr;
    }else{
        while(start < end){
            arr.push(this[start]);
            start++;
        }
    }
    return arr;
}

4.数组去重

Array.prototype.unique = function(){
    var obj = {};
    var arr = [];
    var length = this.length;
    for(var i = 0; i < length; i ++){
        if(!obj[this[i]]){
            obj[this[i]] = this[i];
            arr.push(this[i]);
        }
    }
    return arr;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值