📚 Introdução ao Flattening de Arrays
O conceito de flattening de arrays é fundamental em programação, especialmente em linguagens como JavaScript, onde é comum lidar com dados em formato de arrays aninhados. Arrays aninhados são arrays que contêm outros arrays como elementos, o que pode tornar a manipulação e processamento desses dados mais complexos.
Importância do Flattening de Arrays
O flattening de arrays é útil por várias razões. Ele simplifica a estrutura de dados, tornando-a mais fácil de processar e visualizar. Muitas bibliotecas de processamento de dados e visualização, como Chart.js e Plotly.js, requerem que os dados sejam em formato linear para funcionar corretamente. Além disso, muitas vezes os dados são recebidos em formato aninhado, seja por meio de APIs, leitura de arquivos ou bancos de dados, e precisam ser “achatados” para serem utilizados de forma eficaz.
const nestedArray = [1, [2, [3, 4], 5], 6];
const flattenedArray = nestedArray.flat(Infinity);
console.log(flattenedArray); // Saída: [1, 2, 3, 4, 5, 6]
🤔 O que são Arrays Aninhados
Arrays aninhados são arrays simples que contêm elementos ou outros arrays, que por sua vez podem conter elementos ou mais arrays. Essa estrutura de arrays é chamada de arrays aninhados e também é conhecida como arrays multidimensionais.
Estrutura de Arrays Aninhados
Um exemplo de array aninhado é [1, [2, 3], 4, [5, [6]], 7]. Nesse exemplo, o array aninhado contém 1, então o array [2,3], outro elemento 4, mais um array [5, [6]] e, finalmente, o elemento 7.
📈 Por que Flattening de Arrays é Útil
Simplificação de Processamento de Dados
O flattening de arrays é útil para simplificar o processamento de dados, especialmente quando se lida com conjuntos de dados complexos e hierárquicos. Muitas bibliotecas de processamento e visualização de dados requerem conjuntos de dados lineares para realizar operações de forma eficiente.
Integração de Dados
const dados = [1, [2, 3], 4, [5, [6]], 7];
const dadosFlat = dados.flat(Infinity);
console.log(dadosFlat); // Saída: [1, 2, 3, 4, 5, 6, 7]
📚 Conceito de Flattening de Arrays
Definição e Exemplo
Flattening de arrays é o processo de transformar arrays aninhados em arrays lineares, ou seja, remover a estrutura hierárquica dos arrays e criar um array unidimensional com todos os elementos.
Por exemplo, o array aninhado [1, [2, [3, 4]], 5] pode ser flattend para o array linear [1, 2, 3, 4, 5].
📊 Abordagens Diferentes para Flattening de Arrays
Método Nativo Array.prototype.flat()
JavaScript suporta um método nativo para flatten de arrays, chamado flat(). Por padrão, ele apenas flatten um nível de aninhamento. Você pode passar um argumento para especificar o nível de aninhamento que deseja flatten.
const deeplyNested = [1, [2, [3, 4], 5], 6];
const shallowFlat = deeplyNested.flat();
console.log(shallowFlat);
const deepFlat = deeplyNested.flat(Infinity);
console.log(deepFlat);
Abordagem Recursiva
Uma abordagem recursiva pode ser implementada usando lógica personalizada. Nessa abordagem, uma função chama a si mesma para quebrar os arrays aninhados em um único array.
function flattenRecursively(arr) {
let res = []
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res = res.concat(flattenRecursively(arr[i]))
} else {
res.push(arr[i])
}
}
return res
}
🔍 Método Nativo Array.prototype.flat()
Uso Básico do Array.prototype.flat()
O método Array.prototype.flat() é uma forma nativa de flattening de arrays em JavaScript. Por padrão, ele apenas flatteniza um nível de aninhamento. Você pode passar um argumento para especificar o nível de aninhamento que deseja flattenizar.
const deeplyNested = [1, [2, [3, 4], 5], 6];
const shallowFlat = deeplyNested.flat(); // 1 level flat
console.log(shallowFlat); // output: [1, 2, [3, 4], 5, 6]
const deepFlat = deeplyNested.flat(Infinity); // completely flat
console.log(deepFlat); // output: [1, 2, 3, 4, 5, 6]
Exemplos de Uso do Array.prototype.flat()
Aqui estão alguns exemplos de uso do método Array.prototype.flat():
const arr1 = [1, [2, 3], 4, [5, [6]], 7];
const flatArr1 = arr1.flat(Infinity);
console.log(flatArr1); // output: [1, 2, 3, 4, 5, 6, 7]
const arr2 = [1, [2, [3, 4], 5], 6];
const flatArr2 = arr2.flat(2);
console.log(flatArr2); // output: [1, 2, [3, 4], 5, 6]
🔄 Abordagem Recursiva
Implementação da Abordagem Recursiva
A abordagem recursiva para flattening de arrays é implementada utilizando uma função personalizada que chama a si mesma para quebrar os arrays aninhados em um único array.
function flattenRecursively(arr) {
let res = []
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res = res.concat(flattenRecursively(arr[i]))
} else {
res.push(arr[i])
}
}
return res
}
Exemplo de Uso da Abordagem Recursiva
Para demonstrar a utilidade da abordagem recursiva, vamos considerar um exemplo de array aninhado e aplicar a função flattenRecursively para achatá-lo.
const nestedArray = [1, [2, [3, 4], 5], 6]
const flattenedArray = nestedArray.flat(Infinity)
console.log(flattenedArray) // Saída: [1, 2, 3, 4, 5, 6]
Fonte: dev.to.
Curadoria e Insights: Redação YTI&W (Developers).