foop
Version:
interfaces that describe their intentions.
54 lines (47 loc) • 3.74 kB
JavaScript
var 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
var result = []
var idx = 0
var listLen = list.length
// nested
var value
var 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
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlblJlY3Vyc2l2ZS5qcyIsInNvdXJjZXMiOlsiZmxhdHRlblJlY3Vyc2l2ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2lzL2FycmF5TGlrZScpXG4vLyBjb25zdCB0b2FyciA9IHJlcXVpcmUoJy4uL3RvLWFycicpXG5cbi8qKlxuICogYGZsYXR0ZW5gIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bGx5IHJlY3Vyc2l2ZVxuICpcbiAqIEBtZW1iZXJPZiBhcnJheVxuICogQHNpbmNlIDUuMC4wLWJldGEuNlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk+fSBsaXN0IG11bHRpLWRpbWVuc2lvbmFsIGFycmF5LWxpa2UgbGlzdFxuICogQHJldHVybiB7QXJyYXk8Kj59IGZsYXR0ZW5lZCBsaXN0XG4gKlxuICogQHNlZSBhcnJheS9mbGF0dGVuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICBmbGF0dGVuUmVjdXJzaXZlKFtbMCwgWzFdXV0pXG4gKiAgICAvLz0+IFswLCAxXVxuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbGF0dGVuUmVjdXJzaXZlKGxpc3QpIHtcbiAgLy8gaWYgKCFpc0FycmF5TGlrZShsaXN0KSkgcmV0dXJuIHRvYXJyKGxpc3QpXG4gIGlmICghaXNBcnJheUxpa2UobGlzdCkpIHJldHVybiBbXVxuXG4gIC8vIHN0YXJ0aW5nIHZhbHVlc1xuICBsZXQgcmVzdWx0ID0gW11cbiAgbGV0IGlkeCA9IDBcbiAgbGV0IGxpc3RMZW4gPSBsaXN0Lmxlbmd0aFxuICAvLyBuZXN0ZWRcbiAgbGV0IHZhbHVlXG4gIGxldCBuZXN0ZWRJZHhcblxuICB3aGlsZSAoaWR4IDwgbGlzdExlbikge1xuICAgIC8vIGdvIGRlZXBlciBpZiBuZWVkZWRcbiAgICBpZiAoaXNBcnJheUxpa2UobGlzdFtpZHhdKSkge1xuICAgICAgdmFsdWUgPSBmbGF0dGVuUmVjdXJzaXZlKGxpc3RbaWR4XSlcbiAgICAgIG5lc3RlZElkeCA9IDBcblxuICAgICAgd2hpbGUgKG5lc3RlZElkeCA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSB2YWx1ZVtuZXN0ZWRJZHgrK11cbiAgICAgIH1cbiAgICB9XG4gICAgLy8ganVzdCBgcHVzaGAsIG5vbi1hcnJheSB2YWx1ZVxuICAgIGVsc2Uge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gbGlzdFtpZHhdXG4gICAgfVxuXG4gICAgaWR4ICs9IDFcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCIsImxldCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9COUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRTs7RUFFL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFBLE9BQU8sRUFBRSxFQUFBOzs7RUFHakNDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRTtFQUNmQSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDWEEsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTTs7RUFFekJBLEdBQUcsQ0FBQyxLQUFLO0VBQ1RBLEdBQUcsQ0FBQyxTQUFTOztFQUViLE9BQU8sR0FBRyxHQUFHLE9BQU8sRUFBRTs7SUFFcEIsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7TUFDMUIsS0FBSyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNuQyxTQUFTLEdBQUcsQ0FBQzs7TUFFYixPQUFPLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO09BQzNDO0tBQ0Y7O1NBRUk7TUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7S0FDbEM7O0lBRUQsR0FBRyxJQUFJLENBQUM7R0FDVDs7RUFFRCxPQUFPLE1BQU07Q0FDZDsifQ==