Flatten Arrays

by dpnminh

JavaScript

function Flatten(arr){
	if (!Array.isArray(arr)) return [arr];
  
  var flattened = [];
  
  for (var i = 0; i < arr.length; i++){
  	var element = arr[i];
    
    if (Array.isArray(element)) {
    	var flattenedElement = Flatten(element);
    	flattened = flattened.concat(flattenedElement);
    }
    else{
    	flattened.push(element);
    }
  }
  
  return flattened;
}

function Flatten2(arr){
	var reducer = (flatten, original) => flatten.concat(Array.isArray(original) ? Flatten2(original) : original);
  
  return arr.reduce(reducer, []);
  
}

function Flatten3(arr){
	var flatten = [];
  
  while (arr.length){
  	var element = arr.shift();
    
    if (Array.isArray(element)){
    	arr = element.concat(arr);
    }
    else{
    	flatten.push(element);
    }
  }
  
  return flatten;
}

(function(){
	var arr = [1,[1,2,[1,2,3,[1,2,3,4],5],6],7];
  
  console.log(Flatten(arr));
  console.log(Flatten2(arr));
  console.log(Flatten3(arr));
})();