flattern array

facebook

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));