记录js数组方法

push

  • 数组的push方法是向数组尾部添加项,会改变原数组,并返回修改之后数组的长度
    Array.prototype.push = function () { // es6可通过rest参数代替arguments
      for(var i = 0;i < arguments.length; i++){
        this[this.length] = arguments[i];
      };
      return this.length;
    };
复制代码

pop

  • 删除该数组的最后一个元素
  • 并把数组长度减1,返回删除的元素的值
  • 如果数组已经为空,则pop不改变数组,返回undefined
    Array.prototype.pop = function () {
      var length = this.length;
      if(length){
        var el = this[length - 1];
        this.length = length - 1;
        return el;
      }
    }
复制代码

concat

  • 数组的concat方法是将两个或多个数组合并成一个新数组并返回
  • 该方法不会改变原数组
  • 当传入arguments[i]不是数组时,会采用push方法追加到末尾
    Array.prototype.concat = function () {
      var newArr = deepClone(this);
      var length = arguments.length
      for(var i = 0; i < length; i++){
        if(Object.prototype.toString.call(arguments[i]) !== '[object Array]'){
          newArr[newArr.length] = arguments[i];
        }else{
          var len = arguments[i].length;
          for(var j = 0; j < len; j++){
            newArr[newArr.length] = arguments[i][j];
          }
        }
      }
      return newArr;
    };
复制代码

深度克隆

    function deepClone(obj) {
      if(typeof obj !== 'object') return;
      var newObj = Object.prototype.toString.call(obj) === '[object Object]' ? {} : [];
      for(var key in obj){
        if(obj.hasOwnProperty(key)){
          newObj[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]
        }
      };
      return newObj;
    }
复制代码

转载于:https://juejin.im/post/5a65470d5188257324724c48

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值