lodash源码分析每日一练 - 数组 - concat

今日分享:

每一步都是曼妙的风景~

_.concat(array, [values])

使用:
创建一个新数组,array和任何数组或值连接在一起。
使用示例:

var array = [1];
var other = _.concat(array, 2, [3], [[4]]);
 
console.log(other);
// => [1, 2, 3, [4]]
 
console.log(array);
// => [1]

尝试手写:

①返回新数组;②拼接;③如果参数最外层是个数组,只合并一层数组,不平铺全部层级。

    let array = [1];
    function my_concat(...args){
      let array = [];
      for(var i = 0; i < args.length; i++) {
        if(args[i] instanceof Array) {
          for(var j = 0; j < args[i].length; j++){
            array.push(args[i][j])
          }
        }else{
          array.push(args[i])
        }
      }
      return array;
    } 
    console.log(my_concat(array,2,[3],[[4]]));//[1,2,3,[4]]

源码方案:

function arrayPush(array, values) {
  var index = -1,
      length = values.length,
      offset = array.length;

  while (++index < length) {
    array[offset + index] = values[index];
  }
  return array;
}

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];
  }
  // arrayPush:第一个参数值为第一个数组array,第二个参数值是循环替换后的总数据,	
  // baseFlatten是一个循环解构的函数,第一个参数是数组,第二个参数是解构几层,
  // copyArray复制数组,不修改原数组的一种
  return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
}

理解

lodash各个方法之间穿插调用,它本身是个工具函数,自己内部又定义了更多的工具函数,稍微有点理解“函数式编程”的思想。将能拆出去的工具函数都拆分开,以得到足够的复用。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值