'use strict'12/**3* Expose `arrayFlatten`.4*/5module.exports = arrayFlatten67/**8* Recursive flatten function with depth.9*10* @param {Array} array11* @param {Array} result12* @param {Number} depth13* @return {Array}14*/15function flattenWithDepth (array, result, depth) {16for (var i = 0; i < array.length; i++) {17var value = array[i]1819if (depth > 0 && Array.isArray(value)) {20flattenWithDepth(value, result, depth - 1)21} else {22result.push(value)23}24}2526return result27}2829/**30* Recursive flatten function. Omitting depth is slightly faster.31*32* @param {Array} array33* @param {Array} result34* @return {Array}35*/36function flattenForever (array, result) {37for (var i = 0; i < array.length; i++) {38var value = array[i]3940if (Array.isArray(value)) {41flattenForever(value, result)42} else {43result.push(value)44}45}4647return result48}4950/**51* Flatten an array, with the ability to define a depth.52*53* @param {Array} array54* @param {Number} depth55* @return {Array}56*/57function arrayFlatten (array, depth) {58if (depth == null) {59return flattenForever(array, [])60}6162return flattenWithDepth(array, [], depth)63}646566