// 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 };