Lodash源码解析一compact

197 阅读1分钟

image.png

_.compact 过滤数组假值

image.png

    /*
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to compact.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.compact([0, 1, false, 2, '', 3]);
     * // => [1, 2, 3]
     */
    function compact(array) { 
      var index = -1, // 初始循环点
          length = array == null ? 0 : array.length, // 判断参数的正确性
          resIndex = 0, // 数组初始
          result = []; 

      while (++index < length) {
        var value = array[index];
        if (value) { // 如果有值推进新的数组
          result[resIndex++] = value;
        }
      }
      return result;
    }

整体的思路:

  • 循环所传数组,判断数组长度
  • 判断数组的每一项是否有值,如果有推入新数组
  • 推出新数组