将嵌套数组的数组展开为一个平面数组。 可指定深度。
作用#
Copy var flatten = require('array-flatten') flatten([1, [2, [3, [4, [5], 6], 7], 8], 9]) //=> [1, 2, 3, 4, 5, 6, 7, 8, 9] flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2) //=> [1, 2, 3, [4, [5], 6], 7, 8, 9] (function () { flatten(arguments) //=> [1, 2, 3] })(1, [2, 3])
Github#
https://github.com/blakeembrey/array-flatten
源码#
Copy // 指定深度展开 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 } // 全部展开 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 } function arrayFlatten (array, depth) { if (depth == null) { return flattenForever(array, []) } return flattenWithDepth(array, [], depth) }