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
    }

美滋滋對象

相關文章
相關標籤/搜索