Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/modules / ___dist / chain-able / src / deps / array / flattenRecursive.js
Size: Mime:
"use strict";

const isArrayLike = require("../is/arrayLike"); // const toarr = require('../to-arr')

/**
 * `flatten` is a helper function that returns a fully recursive
 *
 * @memberOf array
 * @since 5.0.0-beta.6
 *
 * @param {Array<Array>} list multi-dimensional array-like list
 * @return {Array<*>} flattened list
 *
 * @see array/flatten
 *
 * @example
 *
 *    flattenRecursive([[0, [1]]])
 *    //=> [0, 1]
 *
 */


module.exports = function flattenRecursive(list) {
  // if (!isArrayLike(list)) return toarr(list)
  if (!isArrayLike(list)) return []; // starting values

  let result = [];
  let idx = 0;
  let listLen = list.length; // nested

  let value;
  let nestedIdx;

  while (idx < listLen) {
    // go deeper if needed
    if (isArrayLike(list[idx])) {
      value = flattenRecursive(list[idx]);
      nestedIdx = 0;

      while (nestedIdx < value.length) {
        result[result.length] = value[nestedIdx++];
      }
    } // just `push`, non-array value
    else {
        result[result.length] = list[idx];
      }

    idx += 1;
  }

  return result;
};