/** @module array/flattenArray.ts */ import { BasicTypes, DeepFlattenNoInfinite, FlattenType } from '../helper-types' function flattenArray]>( arr: Narrow ): DeepFlattenNoInfinite function flattenArray( arr: A ): DeepFlattenNoInfinite function flattenArray>( arr: A ): Array> /** * Flattens an array completely. Handles tuples, maintains literal types. * * @param arr Array to flatten * @esig a[][] -> a[] * @example * flattenArray( [ [ [1], 2 ], [ 3, [4] ]] ) * //=> [ 1, 2, 3, 4 ] : [ 1 , 2 ,3, 4 ] */ function flattenArray( arr ) { return arr.reduce( ( acc, item ) => Array.isArray( item ) ? acc.concat( flattenArray( item ) ) : acc.concat( item ), [] ) } export default flattenArray