How do I make this array flattening function behave recursively in JavaScript? -
this function flatten array 2 levels deep.
function arrflattener(arr){ var newarr = []; for(var = 0; < arr.length; i++){ var target = arr[i]; if(array.isarray(target)){ for(var j = 0; j < target.length; j++){ if(array.isarray(target[j])){ for(var k = 0; k < target[j].length; k++){ newarr.push(target[j][k]); } } else { newarr.push(target[j]); } } } else { newarr.push(arr[i]); } } return newarr; } arrflattener([1, 2, 3, [4, 5, [6],[7],[8]]]); // returns [1, 2, 3, 4, 5, 6, 7, 8]; obviously recursive function need. in pseudo code imagine while loop run until can't find nested array in current array.
any appreciated!
you call function right after check isarray, assign concatinated result newarr, because expect possibly more 1 element.
basically leave next iteration function call instead of iterating children array. eliminates other following loops (in old function), because done in function 1 loop , recursive call, if necessary.
function arrflattener(arr) { var newarr = []; (var = 0; < arr.length; i++) { if (array.isarray(arr[i])) { newarr = newarr.concat(arrflattener(arr[i])); // result of recusion } else { newarr.push(arr[i]); } } return newarr; } console.log(arrflattener([1, 2, 3, [4, 5, [6], [7], [8]]])); // returns [1, 2, 3, 4, 5, 6, 7, 8];
Comments
Post a Comment