lodash 源码解读 _.flattenDepth(array, num)

_.flattenDepth(arr, depth) 按指定层级展开数组

var array = [1, [2, [3, [4]], 5]];

  _.flattenDepth(array, 1);
  // => [1, 2, [3, [4]], 5]

  _.flattenDepth(array, 2);
  // => [1, 2, 3, [4], 5]
  function flattenDepth(array, depth) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(array, depth);
  }
  function baseFlatten(array, depth, predicate, isStrict, result) {
      var index = -1,
          length = array.length;

      predicate || (predicate = isFlattenable);
      result || (result = []);

      while (++index < length) {
        var value = array[index];
        if (depth > 0 && predicate(value)) {
          if (depth > 1) { //通过递归的形式来扩展数组
            baseFlatten(value, depth - 1, predicate, isStrict, result);
          } else {
            arrayPush(result, value);//将结果 value 添加到数组 result
          }
        } else if (!isStrict) {
          result[result.length] = value;
        }
      }
      return result;
    }
时间: 2024-10-08 00:48:35

lodash 源码解读 _.flattenDepth(array, num)的相关文章

lodash 源码解读 _.drop(arr, num)

_.drop(arr, num) 从 num 位开始组成新数组输出,如果num 是 undefined,默认第一位删除保留后面,删除序号大于长度,返回[] var arr = ['a','b','c','d']; var s = _.drop(arr, 3); //return ['d'] function drop(array, n=1) { const length = array == null ? 0 : array.length return length ? slice(array,

lodash 源码解读 _.findIndex(obj_array, fn)

_.findIndex(obj_array, fn), 从对象数组中返回满足条件的第一个对象,如果没有返回-1 var users = [ { 'user': 'barney', 'active': 1 }, { 'user': 'fred', 'active': 1 }, { 'user': 'pebbles', 'active': 2 }, { 'user': 'pebbles', 'active': 1 } ]; var s = _.findIndex(users, function(o)

惰性求值——lodash源码解读

前言 lodash受欢迎的一个原因,是其优异的计算性能.而其性能能有这么突出的表现,很大部分就来源于其使用的算法--惰性求值. 本文将讲述lodash源码中,惰性求值的原理和实现. 一.惰性求值的原理分析 惰性求值(Lazy Evaluation),又译为惰性计算.懒惰求值,也称为传需求调用(call-by-need),是计算机编程中的一个概念,它的目的是要最小化计算机要做的工作. 惰性求值中的参数直到需要时才会进行计算.这种程序实际上是从末尾开始反向执行的.它会判断自己需要返回什么,并继续向后

lodash 源码解读 _chunk(array, size)

_.chunk(array, index): 拆分一个数组成两个数组,拆分位数由 index 决定, 举例 1 _.chunk(['a', 'b', 'c', 'd'], 1);// => [['a', 'b','c'], ['d']] 1 function chunk(array, size) { 2 size = Math.max(size, 0) //这里是判定传过来的 size 是否会小于0,属于边界测试 3 const length = array == null ? 0 : arra

lodash源码学习(1)

前端开发这个行业这几年发展速度太快,各种新技术不断更新,从es5到es6再到es7,从grunt,browserify到webpack,gulp,rollup,还有什么postcss,typescript,flow...,一直都在学习新技术,作为一个才工作不久的新人,感觉内心有点浮躁了,想巩固一下基础,之前听别人说lodash的源码很不错,所以学习学习.我不是什么大牛,如果有什么分析得不对的,大家请务必要原谅我....话不多说,lodash版本4.17.4,开始!. 1.“Array” Meth

15、Spark Streaming源码解读之No Receivers彻底思考

在前几期文章里讲了带Receiver的Spark Streaming 应用的相关源码解读,但是现在开发Spark Streaming的应用越来越多的采用No Receivers(Direct Approach)的方式,No Receiver的方式的优势: 1. 更强的控制自由度 2. 语义一致性 其实No Receivers的方式更符合我们读取数据,操作数据的思路的.因为Spark 本身是一个计算框架,他底层会有数据来源,如果没有Receivers,我们直接操作数据来源,这其实是一种更自然的方式

第15课:Spark Streaming源码解读之No Receivers彻底思考

本期内容: Direct Access Kafka 前面有几期我们讲了带Receiver的Spark Streaming 应用的相关源码解读.但是现在开发Spark Streaming的应用越来越多的采用No Receivers(Direct Approach)的方式,No Receiver的方式的优势: 1. 更强的控制自由度 2. 语义一致性 其实No Receivers的方式更符合我们读取数据,操作数据的思路的.因为Spark 本身是一个计算框架,他底层会有数据来源,如果没有Receive

YYModel 源码解读(二)之NSObject+YYModel.h (1)

本篇文章主要介绍 _YYModelPropertyMeta 前边的内容 首先先解释一下前边的辅助函数和枚举变量,在写一个功能的时候,这些辅助的东西可能不是一开始就能想出来的,应该是在后续的编码过程中 逐步添加的. #define force_inline __inline__ __attribute__((always_inline)) 这行代码用到了C语言的内联函数 内联函数: 是用inline修饰的函数,内联函数在代码层次看和普通的函数结构一样,却不具备函数的性质,内联函数不是在调用时发生控

自动化WiFI钓鱼工具——WiFiPhisher源码解读

工具介绍 开源无线安全工具Wifiphisher是基于MIT许可模式的开源软件,运行于Kali Linux之上. github.com/sophron/wifiphisher 它能够对WPA加密的AP无线热点实施自动化钓鱼攻击,获取密码账户.由于利用了社工原理实施中间人攻击,Wifiphisher在实施攻击时无需进行暴力破解. 此外安利一个我们正在开发的项目,基于wifiphisher的校园网钓鱼工具,希望有小伙伴来一起玩耍:-P github.com/noScripts/Campus-Fake