flattern array
by Paco86
JavaScript
var arr = [[1,2,3],4,5,6,[7,[8,9],10,[11],[12,[[13]]]]];
// Space complexity: O(n)
// Time complexity: O(n) where n includes nested elements
var flatternRecursion1 = function(arr) {
var res = [];
arr.forEach((item) => {
if (Array.isArray(item)) {
res = res.concat(flatternArray(item));
} else {
res.push(item);
}
});
return res;
}
var flatternRecursion2 = function(arr) {
return arr.reduce((acc, cur) => {
if (Array.isArray(cur)) {
acc = acc.concat(flatternRecursion2(cur));
} else {
acc.push(cur);
}
return acc;
}, [])
}
function flattenIterative1(arr) {
var result = arr.slice();
var i = 0;
while(i < result.length) {
if (Array.isArray(result[i])) {
result.splice(i, 1, ...result[i]);
} else {
i++;
}
}
return result;
}
function flattenIterative2(arr) {
var result = [];
var stack = [...arr];
while(stack.length) {
const cur = stack.pop();
if (Array.isArray(cur)) {
stack.push(...cur)
} else {
result.push(cur);
}
}
return result.reverse();
}
console.log(flattenIterative2(arr));
var newArr = [[1, 2, 3, [4, 5, [6]]], {a: 1}, [function(){}], [7, 8, {}], 12, NaN, 13];
var flatArraySkipObj = function(arr) {
var res = [];
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res = res.concat(flatArraySkipObj(arr[i]));
} else if (typeof arr[i] !== 'object') {
res.push(arr[i]);
}
}
return res;
}
console.log(flatArraySkipObj(newArr));