lodash数组篇之3 concat( )

建立一个新数组,将array与任何数组 或 值链接在一块儿es6

自行实现数组

concat:function(){
      let length = arguments.length
      let result = []
      if(!length) {
         return result
       }
      for(let i = 0;i<argu.length;i++) {
        result = result.concat(argu[i])
       }
      return result
    }

lodash 实现函数

function concat() {
  var length = arguments.length;
  if (!length) {
    return [];
  }
  var args = Array(length - 1),
      array = arguments[0],
      index = length;

  while (index--) {
    args[index - 1] = arguments[index];
  }
  return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
}

因为参数的数量不肯定 因此首先想到函数免费赠送的一个参数 arguments。这点和官方的想法是同样的 。arguments是一个包含了全部参数的类数组对象,好比说第一个参数能够经过arguments[0]获取。
可是arguments参数有一个很诡异的地方,没法在箭头函数内使用,只能在普通的function内使用。
多是和 this 同样的缘由,因为箭头函数的缘由,指向了父级做用域。this

而后最后那里,我是用了es6提供的原生concat方法。lodash用到了他本身实现的一些方法,后面再看是什么东西。google


刚刚google的时候都在说es6的新特性 rest 能够替代有不少缺陷的arguments(好比说不是真正的数组,没法在严格模式和箭头函数内使用)rest

ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不须要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。根据rest concat()函数能够改为下面这种形式code

concat:(...p) =>{
        let length = p.length
        let result = []
        if(!length) {
            return result
        }
       for(let i = 0;i<p.length;i++) {
            result = result.concat(p[i])
       }
      return result
    }

美滋滋对象

相关文章
相关标签/搜索