Suppose, we have a nested array of numbers like this −
const arr = [1, 4, 5, [ 5, 6, [ 6, 19, 5, [5] ], [5, 7, 6, [6, 8]], 8 ], 6];
We are required to write a JavaScript function that takes a nested array, ideally nested to any arbitrary level.
Our function should then prepare and return a new array that is nothing just a flattened version of the input array.
There are two conditions that we are asked to avoid while writing our function −
We cannot make use of any custom recursive function anywhere in our code.
We cannot make use of the Array.prototype.flat() method in our code.
Example
The code for this will be −
const arr = [1, 4, 5, [
5, 6, [
6, 19, 5, [5]
], [5, 7, 6, [6, 8]], 8
], 6];
const flattenWithoutRecursion = (arr = []) => {
const res = [];
let level = 0, ref = [arr], counter = [0];
while(level >= 0){
if (counter[level] >= ref[level].length) {
level--;
continue;
};
if (Array.isArray(ref[level][counter[level]])) {
ref[level + 1] = ref[level][counter[level]]
counter[level]++;
level++;
counter[level] = 0;
continue;
};
res.push(ref[level][counter[level]]);
counter[level]++;
};
return res;
};
console.log(flattenWithoutRecursion(arr));Output
And the output in the console will be −
[ 1, 4, 5, 5, 6, 6, 19, 5, 5, 5, 7, 6, 6, 8, 8, 6 ]