Extract child arrays from nested arrays Extract child arrays from nested arrays arrays arrays

Extract child arrays from nested arrays


Element like [[14, 15], [16, 17]] will introduce a [] after recursion. This should be handled by checking length.

var arrs = [  [1, 2, [3, 4], 5],  [6, [7, 8, 9, [10, 11]]],  [12, 13],  [[14, 15], [16, 17]],  [[1], 4, [1, 1], 4]];function extractArrays (arr, acc=[]) {  if (arr.length == 0 ) return acc;  let pure = arr.filter(elm => !Array.isArray(elm));  if (pure.length > 0) {    acc.push(pure);  }      acc.concat(arr.filter(elm => Array.isArray(elm)).map(elm => extractArrays(elm, acc)));  return acc;}console.log(extractArrays(arrs));


You can try the following code

var arrs = [  [1, 2, [3, 4], 5],  [6, [7, 8, 9, [10, 11]]],  [12, 13],  [    [14, 15],    [16, 17]  ], // <-- added additional test case  [    [1], 4, [1, 1], 4  ]];function extractArrays(arr) {  return arr.reduce((res, curr, i) => {    if (Array.isArray(curr)) {      res = res.concat(extractArrays(curr));    } else {        let index = 0;        for (let j = 0; j <= i; j++) {          if (!Array.isArray(arr[j])) {            res[index] ? res[index].push(curr) : res.push([curr]);            break;          } else {            index++;          }        }              }    return res;  }, []); // <-- no initial empty array inside here}console.log(extractArrays(arrs));


I just wanted to share my approach to this problem, I enjoyed trying to solve it, in my case I also passed an array to the extractArrays method, in order to make easier to capture and filter every array inside the arrs param.

let result = [];extractArrays(arrs, result);console.log(result);function extractArrays(arr, result) {  let newResult = arr.reduce((acc, curr) => {    if (Array.isArray(curr)) {      extractArrays(curr, result);    } else {      acc.push(curr);    }    return acc;  }, []);  newResult.length && result.push(newResult);}