返回

Lodash源码解读之compact.js

前端

Lodash源码解读之compact.js

Lodash是一个知名的JavaScript实用工具库,提供了一系列操作数组、字符串、对象等数据的实用方法。在Lodash库中,compact.js负责实现compact方法,该方法用于从数组中移除所有假值元素,包括false、null、undefined、NaN、空字符串和0。本文将对compact.js的源码进行详细分析,帮助读者深入理解compact方法的实现原理及其在项目中的应用。

compact.js 源码分析

/**
 * Creates an array with all falsey values removed. The values `false`, `null`, `0`, `"",`, `undefined`, and `NaN` are falsey.
 *
 * @since 0.1.0
 * @category Array
 * @param {Array} array The array to compact.
 * @returns {Array} Returns the new array of filtered values.
 * @see _.difference, _.pull
 * @example
 *
 * _.compact([0, 1, false, 2, '', 3]);
 * // => [1, 2, 3]
 */
function compact(array) {
  var resIndex = 0;
  var result = [];

  if (array == null) {
    return result;
  }
  for (var i = 0, length = array.length; i < length; i++) {
    var value = array[i];
    if (value) {
      result[resIndex++] = value;
    }
  }
  return result;
}

源码解析

1. 函数声明

function compact(array) {
  // ...
}

compact方法接收一个参数array,该参数是一个数组。该方法的作用是返回一个新的数组,其中包含了array中所有非假值元素。

2. 变量声明

var resIndex = 0;
var result = [];

resIndex变量用于记录result数组的当前索引。result变量用于存储compact后的数组。

3. 空数组判断

if (array == null) {
  return result;
}

首先,该方法判断array是否为空。如果array为空,则直接返回result,因为空数组本身就是compact后的结果。

4. 遍历数组

for (var i = 0, length = array.length; i < length; i++) {
  // ...
}

接下来,该方法使用for循环遍历array。在循环过程中,它将array[i]的值存储在value变量中。

5. 假值判断

if (value) {
  result[resIndex++] = value;
}

在循环体内,该方法判断value是否为假值。如果value为真值,则将value添加到result数组中,并将resIndex变量递增1。

6. 返回结果

return result;

最后,该方法返回result数组。

总结

通过对compact.js的源码分析,我们可以看到compact方法的实现非常简单。它首先检查array是否为空,如果是,则直接返回一个空数组。否则,它使用for循环遍历array,并将非假值元素添加到result数组中。最后,它返回result数组。

compact方法是一个非常有用的工具,可以帮助我们从数组中移除所有假值元素。它在许多场景中都有应用,例如:

  • 从表单中获取用户输入并进行处理
  • 从数据库中获取数据并进行处理
  • 从API中获取数据并进行处理
  • 在数据可视化中过滤数据

总之,compact方法是一个非常实用的工具,可以帮助我们简化数据处理任务。