Estructuras de datos

Formas de organizar los datos de nuestra aplicación


Una vez que ya conocemos los tipos de datos elementales de Javascript, tenemos que comenzar a pensar más a lo grande. Estos tipos de datos son la naturaleza más pequeña que almacenamos en nuestro código. A medida que nuestra aplicación web va creciendo y haciéndose más grande, comenzaremos a crear estructuras cada vez más complejas.

Estas estructuras se denominan estructuras de datos y conociendo las más básicas suele ser suficiente. Sin embargo, cuantas más conozcamos y dominemos, mucho mejor.

Estas estructuras de datos pueden ser de diversos tipos:

  • 1️⃣🟩 Estructuras elementales (primitivos): Tipos de datos (post anterior)
  • 2️⃣🟩 Estructuras básicas: Arrays y Objetos
  • 3️⃣🟨 Estructuras básicas específicas: Set y Map
  • 4️⃣🟥 Estructuras avanzadas: pilas, colas, grafos, árboles, etc. (ver más adelante)

Si estás en una fase inicial aprendiendo Javascript, es suficiente con centrarte en las dos estructuras básicas principales: y que he marcado en verde. Si ya tienes cierta experiencia, o eres un programador avanzado, echa un vistazo a las siguientes.

Estructuras básicas

Como hemos mencionado, las estructuras elementales son simplemente tipos de datos individuales y muy básicos: Números, valores booleanos, cadenas de texto, números grandes y símbolos. Si no conoces estos tipos de datos, echa un vistazo al post anterior.

Pero dentro de las estructuras que solemos utilizar frecuentemente (que no entran dentro de los tipos primitivos), hay varias estructuras un poco más complejas:

🟩 Arrays

Los arrays son colecciones de elementos, colocados de forma secuencial, uno tras otro. Se utilizan para organizar grupos de datos, que tienen cierta relación entre sí, o que tienen cierto sentido que se coloquen juntos en una sola estructura y en un cierto orden.

Pueden ser de varios tipos:

Estructuras de datos básicas: Array o arreglos

  • 1️⃣ Arrays homogéneos: Colección de elementos del mismo tipo (todos números, por ejemplo).
  • 2️⃣ Arrays mixto: Colección de elementos de diferente tipo (diferentes).
  • 3️⃣ Arrays de arrays: Colección de elementos, donde sus elementos pueden ser también otros y que contienen a su vez más información.

Más adelante, hablaremos de las estructuras de tipo Array, sus métodos y temas relacionados.

🟩 Objetos

Los objetos en Javascript también son colecciones como los , pero tienen significativas diferencias. Son datos dobles: clave-valor, es decir, una estructura que contiene una colección de datos relacionados, donde cada dato tiene una clave y un valor.

Sus características son las siguientes:

Estructuras de datos básicas: Objetos o diccionarios

  • Al contrario que los , son estructuras que no están ordenadas. Simplemente se almacenan.
  • Al no estar ordenadas, no puedes recorrerlas (en principio, ya veremos matices más adelante).
  • Puedes acceder a sus claves, y así obtener el valor relacionado a esa clave.
  • Sólo pueden contener y como claves. No vale cualquier tipo.

Más adelante hablaremos de las estructuras de tipo Objeto, sus métodos y temas relacionados.

🟧 Set

Los Set o conjuntos, son colecciones de elementos similares a los Array, pero con una diferencia particular: no pueden contener elementos duplicados. Por ejemplo, si tenemos un set de números, el 5 solo puede insertarse una sola vez.

Esto lo hace una estructura de datos ideal si tienes esa restricción en tu caso de uso. Con un array, tendrías que estar controlándolo manualmente.

Estructuras de datos básicas: Set o conjuntos

  • Colección de elementos, muy similar a los
  • Importante: Los elementos no se pueden repetir si son iguales.

Más adelante, examinaremos los detalles de las estructuras de datos de tipo Set o conjuntos.

🟧 Map

Los Map o mapas, son estructuras muy similares a los objetos de Javascript, sin embargo, son un poco más potentes y eficientes. Es una estructura que permite almacenar pares clave-valor (como los objetos), pero con ciertas diferencias:

Estructuras de datos básicas: Map o mapas

  • Permite claves de cualquier tipo, no sólo y como los objetos.
  • Garantiza un orden de elementos insertados, al contrario que los objetos.
  • Es una estructura de datos más eficiente para búsquedas de datos.

Más adelante, profundizaremos en las estructuras de datos de tipo Map.

🟪 ArrayBuffer

Los ArrayBuffer (y tipos relacionados) son estructuras que permiten almacenar grandes volúmenes de información «cruda» en memoria. Esto los hace ideales para el trabajo con datos binarios como manipulación de imágenes o video o tareas donde necesitas manipular información de forma muy eficiente.

Estructuras de datos básicas 3

Además de ArrayBuffer, también tenemos tipos muy particulares y más específicos donde podemos determinar el tamaño que ocupan en memoria.

Tabla de tipos y tamaños
Bytes por elemento¿Con signo?UsoEjemplos
🟦 ArrayBuffer
Datos «raw»
N/ADatos binarios "crudos"Imágenes, archivos, buffers...
1️⃣ Int8Array
-128 a 127
Bytes con signoAudio PCM, valores negativos en red
1️⃣ Uint8Array
0 a 255
NoBytes sin signoImágenes, buffers binarios
1️⃣ Uint8ClampedArray
0 a 255
NoBytes sin signo, con clampingPíxeles en canvas
2️⃣ Int16Array
-32,768 a 32,767
Enteros de 16 bits con signoSeñales de audio, sensores
2️⃣ Uint16Array
0 a 65,535
NoEnteros de 16 bits sin signoColores RGB, formatos de archivo
4️⃣ Int32Array
-2,147,483,648 a 2,147,483,647
Enteros grandes con signoCálculos intensivos
4️⃣ Uint32Array
0 a 4,294,967,295
NoEnteros grandes sin signoWebGL, datos de alto rendimiento
4️⃣ Float32Array
±1.2×10⁻³⁸ a ±3.4×10³⁸
Coma flotante (simple)Gráficos 3D, física básica
8️⃣ Float64Array
±5.0×10⁻³²⁴ a ±1.8×10³⁰⁸
Coma flotante (doble)Finanzas, simulaciones científicas
8️⃣ BigInt64Array
-2⁶³ a 2⁶³-1
Enteros grandes con signoIdentificadores únicos, criptografía
8️⃣ BigUint64Array
0 a 2⁶⁴-1
NoEnteros grandes sin signoCriptografía, dir. de memoria

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev