Created dir /src, and moved the source files into it. Left package.json, README.md and settings.json out. Modified package.json to point to the new src dir.
65 lines
1.2 KiB
JavaScript
65 lines
1.2 KiB
JavaScript
'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)
|
|
}
|