41 lines
		
	
	
		
			963 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			963 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// 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;
 | 
						|
};
 |