Home Reference Source

ts_temp/array/flatten.js

import isArrayLike from '../is/arrayLike';
/**
 * Returns a new list by pulling every item out of it (and all its sub-arrays)
 * and putting them in a new array, depth-first.
 *
 * @param {Array} arr The array to consider.
 * @return {Array} The flattened list.
 * @example
 *
 *      flatten([1, 2, [3, 4], 5, [6, [7, 8, [9, [10, 11], 12]]]]);
 *      //=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
 */
const flatten = (arr = []) => {
    const result = [];
    for (let i = 0; i < arr.length; i++) {
        const a = arr[i];
        if (isArrayLike(a)) {
            const nested = flatten(a);
            for (let j = 0; j < nested.length; j++) {
                result.push(nested[j]);
            }
        }
        else {
            result.push(a);
        }
    }
    return result;
};
export default flatten;