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 with depth.

@param  {Array}  array
@param  {Array}  result
@param  {Number} depth
@return {Array}