import isArrayLike from '../isArrayLike'; /** * `makeFlat` is a helper function that returns a one-level or fully recursive * function based on the flag passed in. * * @func makeFlat * @memberOf RA * * @category List * @param {!bool} = should recursively flatten * @param {!Array} = the nested list to be flattened * @return {!Array} = the flattened list * @sig Bool -> List -> List * */ const makeFlat = (recursive) => function flatt(list) { let value; let jlen; let j; const result = []; let idx = 0; while (idx < list.length) { if (isArrayLike(list[idx])) { value = recursive ? flatt(list[idx]) : list[idx]; j = 0; jlen = value.length; while (j < jlen) { result[result.length] = value[j]; j += 1; } } else { result[result.length] = list[idx]; } idx += 1; } return result; }; export default makeFlat;