← JavaScript

Coding challenge

flatten a nested array (turn the nested levels into a single level).

Challenge: flatten a nested array (turn the nested levels into a single level).
Input: [1, [2, 3], [4, [5, 6]]]
Expected output: [1, 2, 3, 4, 5, 6]
Show solution
// Reto: aplanar un arreglo anidado (convertir los niveles anidados en un solo nivel).
// Entrada: [1, [2, 3], [4, [5, 6]]]
// Salida esperada: [1, 2, 3, 4, 5, 6]

// Solución 1: usando el método flat con Infinity.
// Infinity le dice a flat que aplane sin importar cuántos niveles haya.
function aplanar(arreglo) {
  return arreglo.flat(Infinity);
}

// Solución 2: recursiva (buena para explicar cómo funciona por dentro).
// Iteramos cada elemento: si es un arreglo, también lo aplanamos; si no, lo agregamos.
function aplanarRecursivo(arreglo) {
  let resultado = [];
  for (const elemento of arreglo) {
    if (Array.isArray(elemento)) {
      resultado = resultado.concat(aplanarRecursivo(elemento));
    } else {
      resultado.push(elemento);
    }
  }
  return resultado;
}

console.log(aplanar([1, [2, 3], [4, [5, 6]]]));       // [1, 2, 3, 4, 5, 6]
console.log(aplanarRecursivo([1, [2, [3, [4]]]]));    // [1, 2, 3, 4]
console.log(aplanar([[1], [2], [3]]));                // [1, 2, 3]
console.log(aplanarRecursivo([]));                     // [] (caso límite)

// Explicación:
// flat(Infinity) aplana todos los niveles de una sola vez. La versión recursiva
// revisa cada elemento: si es un arreglo, se llama a sí misma para aplanarlo;
// si no, lo agrega directamente. Así deshace el anidamiento.

module.exports = { aplanar, aplanarRecursivo };