OneCompiler

Flatten tree into list with condition

194
const tree = [1, 2, 3, [4, 5, 6], [12, 8], [13, [14, 15]]];
let list = [];


// treeToList(tree);
function conditionFiltering(tree, condition = null) {
     for (const element of tree) {
          if (Array.isArray(element)) {
               conditionFiltering(element, condition, list);
          } else {
               if (!condition || (condition && condition(element))) {
                    list.push(element);
               }
          }
     }
}

function is_even(num) {
     return num % 2 === 0;
}

function is_odd(num) {
     return num % 2 !== 0;
}

function is_multipleOfN(num, n) {
     return num % n === 0;
}

// Filter even numbers
const evenList = [];
conditionFiltering(tree, is_even);
console.log("Even numbers:", list);

// Filter odd numbers
list = [];
conditionFiltering(tree, is_odd);
console.log("Odd numbers:", list);

// Filter multiples of any number
list = [];
conditionFiltering(tree, (num) => is_multipleOfN(num, 3));
console.log("Multiples of 3:", list);