[源计划] array-flatten

将嵌套数组的数组展开为一个平面数组。 可指定深度。

作用

    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

源码

    // 指定深度展开
    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)
    }
原文地址:https://www.cnblogs.com/aaronzhou001/p/9088981.html