| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | 'use strict'/** * Expose `arrayFlatten`. */module.exports = arrayFlatten/** * Recursive flatten function with depth. * * @param  {Array}  array * @param  {Array}  result * @param  {Number} depth * @return {Array} */function flattenWithDepth (array, result, depth) {  for (var i = 0; i < array.length; i++) {    var value = array[i]    if (depth > 0 && Array.isArray(value)) {      flattenWithDepth(value, result, depth - 1)    } else {      result.push(value)    }  }  return result}/** * Recursive flatten function. Omitting depth is slightly faster. * * @param  {Array} array * @param  {Array} result * @return {Array} */function flattenForever (array, result) {  for (var i = 0; i < array.length; i++) {    var value = array[i]    if (Array.isArray(value)) {      flattenForever(value, result)    } else {      result.push(value)    }  }  return result}/** * Flatten an array, with the ability to define a depth. * * @param  {Array}  array * @param  {Number} depth * @return {Array} */function arrayFlatten (array, depth) {  if (depth == null) {    return flattenForever(array, [])  }  return flattenWithDepth(array, [], depth)}
 |