每天一道js方法--lodash源码解读(一)

_.chunk(array, [size=1])

  • array(Array):需要被处理的数组。
  • [size=1](number): 每个块的长度。

将array拆分成多个size长度的块,把这些块组成一个新数组。 如果array无法被分割成全部等长的块,那么最后剩余的元素将组成一个块。

function chunk(array, size) {
  /*
   * max() 方法可返回两个指定的数中带有较大的值的那个数。
   * 所以这里用Math.max方法是用来判断size是否大于0,大于0则size = size 否则为0
   * 问:为什么不用三元运算符运算方程
   */
  size = Math.max(size, 0)
  /*
   *  三元计算 -- 如果array不存在则长度为0,否则为array的长度
   */ 
  const length = array == null ? 0 : array.length
  if (!length || size < 1) {
    return []
  }
  let index = 0
  let resIndex = 0
  /*
   *  Math.ceil() === 向上取整
   */ 
  const result = new Array(Math.ceil(length / size))

  while (index < length) {
    result[resIndex++] = baseSlice(array, index, (index += size))
  }
  return result
}

function baseSlice(array, start, end) {
  let index = -1
  let { length } = array

  if (start < 0) {
    start = -start > length ? 0 : (length + start)
  }
  end = end > length ? length : end
  if (end < 0) {
    end += length
  }
  // >>>的意思是二进制右移一位 比如 2 >>> 1 === 1
  // 2 的二进制为 0010 右移一位等于 0001 
  // >>>= 的意思是右移并赋值
  length = start > end ? 0 : ((end - start) >>> 0)
  start >>>= 0

  const result = new Array(length)
  while (++index < length) {
    result[index] = array[index + start]
  }
  return result
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,219评论 6 13
  • _.chunk(array, [size=1]) 将array拆分成多个size长度的块,把这些块组成一个新数组。...
    windole阅读 749评论 0 0
  • php usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解包。 uni...
    思梦PHP阅读 2,041评论 1 24
  • 闲来听瀑,对水长叹,恨别初惊。依稀梦中遥望,曾抚旧殇,早生华发。 牵魂天边媚眼,叹离愁惟煎。望断断、千里姻缘,梦闻...
    007008阅读 342评论 8 8