lodash.compact 源码阅读

compact

将一个数组变为紧凑数组

Creates an array with all falsey values removed. The values false, null, 0, "", undefined, and NaN are falsey.

其思想就是将传进来的数组做一个循环,把所有不是 falsey 的部分挨个放到新的数组中。

function compact(array) {
  var index = -1,
      length = array == null ? 0 : array.length,   // 对 length 有效值做处理
      resIndex = 0,
      result = [];

  // 对传参的数组做循环
  while (++index < length) {
    var value = array[index];
    if (value) {
      // 将非 falsey 的值放到新数组 result 里
      result[resIndex++] = value;
    }
  }
  return result;
}

自己的简单实现

function compact(array) {
  // array
  if (array == null) {
    return [];
  }
  return array.filter(value => value);
}