12345678910111213141516171819202122232425262728293031323334353637383940 |
- // Stack grow safe implementation
- "use strict";
- var ensureValue = require("../../object/valid-value")
- , isArray = Array.isArray
- , objHasOwnProperty = Object.prototype.hasOwnProperty;
- module.exports = function () {
- var input = ensureValue(this), index = 0, remaining, remainingIndexes, length, i, result = [];
- // Jslint: ignore
- main: while (input) {
- length = input.length;
- for (i = index; i < length; ++i) {
- if (!objHasOwnProperty.call(input, i)) continue;
- if (isArray(input[i])) {
- if (i < length - 1) {
- // eslint-disable-next-line max-depth
- if (!remaining) {
- remaining = [];
- remainingIndexes = [];
- }
- remaining.push(input);
- remainingIndexes.push(i + 1);
- }
- input = input[i];
- index = 0;
- continue main;
- }
- result.push(input[i]);
- }
- if (remaining) {
- input = remaining.pop();
- index = remainingIndexes.pop();
- } else {
- input = null;
- }
- }
- return result;
- };
|