flatMapDeep.js
 1  var baseFlatten = require('./_baseFlatten'),
 2      map = require('./map');
 3  
 4  /** Used as references for various `Number` constants. */
 5  var INFINITY = 1 / 0;
 6  
 7  /**
 8   * This method is like `_.flatMap` except that it recursively flattens the
 9   * mapped results.
10   *
11   * @static
12   * @memberOf _
13   * @since 4.7.0
14   * @category Collection
15   * @param {Array|Object} collection The collection to iterate over.
16   * @param {Function} [iteratee=_.identity] The function invoked per iteration.
17   * @returns {Array} Returns the new flattened array.
18   * @example
19   *
20   * function duplicate(n) {
21   *   return [[[n, n]]];
22   * }
23   *
24   * _.flatMapDeep([1, 2], duplicate);
25   * // => [1, 1, 2, 2]
26   */
27  function flatMapDeep(collection, iteratee) {
28    return baseFlatten(map(collection, iteratee), INFINITY);
29  }
30  
31  module.exports = flatMapDeep;