05 - Estructuras de Datos
05 - Estructuras de Datos
localhost:8000/print 1/37
31/5/2021 localhost:8000/print
Arrays
Las distintas formas de inicializar un array:
const arr1 = []
// Inicializa un array vacio
localhost:8000/print 2/37
31/5/2021 localhost:8000/print
Métodos de arrays
Así como vimos que para agregar y sacar elementos de un arreglo tenemos los métodos push y pop respectivamente, los arrays
cuentan con una gran variedad de métodos que son muy útiles, vamos a ver las más usadas.
localhost:8000/print 3/37
31/5/2021 localhost:8000/print
> forEach
Esta método nos permite recorrer el array, ejecutando una función por cada elemento.
Ej: Imprimir todos los elementos de un array dado, indicando en que posición está cada uno
arr1.forEach(imprimirElemento)
Como podemos ver, el método forEach recibe como parametro una función, esa función la va a llamar internamente el método
forEach por cada elemento del array y va a recibir por parametros el elemento en sí y la posición de ese elemento en el array.
También lo podríamos hacer así:
localhost:8000/print 4/37
31/5/2021 localhost:8000/print
arr1.forEach(function(element, index) {
console.log(`En la posición ${index} se encuentra el elemento ${element}`)
})
Así lo vamos a encontrar más comunmente, pero para que sea un poco más facil de entender, por el momento vamos a seguir
usando la forma anterior, es decir, declarando una función previamente.
localhost:8000/print 5/37
31/5/2021 localhost:8000/print
> map
El método map sirve para "transformar" cada elemento del array en otra cosa, dando como resultado un nuevo array con todos los
elementos transformados.
function transformarElemento(element) {
return element.toString();
}
Notemos que el método map no modifica el array original, sino que devuelve uno nuevo. Por otro lado, la función
transformarElemento solo estamos usando el parametro element, como en este caso no es necesario usar el index, ni lo ponemos.
Además, la función tiene que retornar el elemento transformado.
localhost:8000/print 6/37
31/5/2021 localhost:8000/print
> filter
El método filter sirve para obtener un sub-array solo con los elementos que cumplan una cierta condición.
function elementoMayorADiez(element) {
return element > 10
}
Notemos que el método filter no modifica el array original, sino que devuelve uno nuevo. Por otro lado, la función
elementoMayorADiez tiene que retornar true si el elemento cumple la condición de filtrado, o false en caso contrario.
localhost:8000/print 7/37
31/5/2021 localhost:8000/print
> find
El método find sirve para encontrar un elemento en un array
function esElementoBuscado(element) {
return element === "abc"
}
Notemos que el método filter retorna el elemento buscado (undefined si no encuentra nada). Por otro lado, la función
esElementoBuscado tiene que retornar true si el elemento cumple la condición de búsqueda, o false en caso contrario.
localhost:8000/print 8/37
31/5/2021 localhost:8000/print
> includes
El método includes sirve para determinar si un array contiene un elemento dado o no.
localhost:8000/print 9/37
31/5/2021 localhost:8000/print
> some
El método some sirve para determinar si ALGUNO de los elementos del array cumple una cierta condición
function elementoMayorADiez(element) {
return element > 10
}
localhost:8000/print 10/37
31/5/2021 localhost:8000/print
> every
El método every sirve para determinar si TODOS de los elementos del array cumplen una cierta condición
function elementoMayorADiez(element) {
return element > 10
}
localhost:8000/print 11/37
31/5/2021 localhost:8000/print
> slice
El método slice sirve para "cortar" un pedazo del array y así obtener un sub-array
Notemos que el método slice no modifica el array original, sino que devuelve uno nuevo. slice recibe dos números, el primero
indica a partir de qué índice queremos empezar a "cortar"; el segundo determina cuantos elementos queremos incluir en nuestro
corte.
localhost:8000/print 12/37
31/5/2021 localhost:8000/print
> reduce
El método reduce sirve para obtener un único resultado a partir de procesar todos los elementos de un array
Notemos que el método reduce devuelve un único valor. La función sumarElementos recibe el resultado parcial y el elemento
como parametro. El método reduce no solo recibe una función como parametro, sino tambien un valor de inicialización para el
resultado parcial.
localhost:8000/print 13/37
31/5/2021 localhost:8000/print
localhost:8000/print 14/37
31/5/2021 localhost:8000/print
Encadenar métodos
Todos aquellos métodos que devuelvan un nuevo array, pueden ser encadenadas
Ej: Dado un array de números, obtener un nuevo array con todos los números mayores a 10 transformados a string
function esMayorADiez(element) {
return element > 10
}
function pasarAString(element) {
return element.toString()
}
localhost:8000/print 15/37
31/5/2021 localhost:8000/print
const obj2 = {
nombre: "pepe",
edad: 99
} // Inicializa objeto con atributos
console.log(obj2)
localhost:8000/print 16/37
31/5/2021 localhost:8000/print
Object.keys
La clase Object tiene el método estático keys que nos permite obtener un array con todos los nombres de los atributos de un
objeto
const obj = {
nombre: "pepe",
edad: 99,
otraKey: "valor"
}
Notemos que al ser un método estático de la clase Object, lo tenemos que llamár así Object.keys. Más adelante cuando veamos
programación orientada a objetos, vamos a entender esto mejor, por el momento dejemoslo pasar.
localhost:8000/print 17/37
31/5/2021 localhost:8000/print
Object.values
La clase Object tiene el método estático values que nos permite obtener un array con todos los valores de los atributos de un
objeto
const obj = {
nombre: "pepe",
edad: 99,
otraKey: "valor"
}
Notemos que al ser un método estático de la clase Object, lo tenemos que llamár así Object.values. Más adelante cuando veamos
programación orientada a objetos, vamos a entender esto mejor, por el momento dejemoslo pasar.
localhost:8000/print 18/37
31/5/2021 localhost:8000/print
Object.hasOwnProperty
Los objetos poseen método hasOwnProperty que nos permite saber si el objeto contiene o no un cierto atributo
const obj = {
nombre: "pepe",
edad: 99,
otraKey: "valor"
}
console.log(tieneNombre) // true
console.log(tieneApellido) // false
localhost:8000/print 19/37
31/5/2021 localhost:8000/print
localhost:8000/print 20/37
31/5/2021 localhost:8000/print
Spread operator
El operador spread permite "separar" los elementos de un array o los atributos de un objeto.
console.log(arr2) // [5, 8, 3, 4]
localhost:8000/print 21/37
31/5/2021 localhost:8000/print
Otro ejemplo
La función Math.max recibe una cierta cantidad de números y retorna el máximo.
Math.max(5, 3, 7, 4, 8, 1) // Retorna 8
Pero si queremos obtener el máximo y todos nuestro números están dentro de un array, podemos hacer lo siguiente
localhost:8000/print 22/37
31/5/2021 localhost:8000/print
const obj2 = {
...obj1,
edad: 88,
otraKey: "valor"
}
localhost:8000/print 23/37
31/5/2021 localhost:8000/print
Comparaciones
Para tener en cuenta, si comparamos dos objetos o arrays distintos, por más que tengan los mismos elementos o atributos, SON
DISTINTOS.
localhost:8000/print 24/37
31/5/2021 localhost:8000/print
¿const o let?
Como habrán notado, en muchos de los ejemplos, usamos const para declarar arrays y objects. Esto permite agregar o sacar
elementos/atributos pero no permite asignar un nuevo array/object a la variable
localhost:8000/print 25/37
31/5/2021 localhost:8000/print
const compras = [
{ usuario: "pepe", producto: "mochila", costo: 1800 },
{ usuario: "maria", producto: "lapicera", costo: 50 },
{ usuario: "juan", producto: "cuaderno", costo: 200 },
{ usuario: "pepe", producto: "carpeta", costo: 300 },
{ usuario: "laura", producto: "escuadra", costo: 150 },
]
localhost:8000/print 26/37
31/5/2021 localhost:8000/print
Resolución:
function esCompraDePepe(compra) {
return compra.usuario === "pepe"
}
function obtenerProducto(compra) {
return compra.producto
}
localhost:8000/print 27/37
31/5/2021 localhost:8000/print
const alumnos = [
{ numAlumno: "1234/0", nombre: "maria", nota: 7 },
{ numAlumno: "4459/2", nombre: "juan", nota: 3 },
{ numAlumno: "5877/1", nombre: "pepe", nota: 5 },
{ numAlumno: "5512/0", nombre: "josefina", nota: 9 },
{ numAlumno: "9874/0", nombre: "jaime", nota: 7 },
]
localhost:8000/print 28/37
31/5/2021 localhost:8000/print
resultado esperando
localhost:8000/print 29/37
31/5/2021 localhost:8000/print
2. Stock agotado
Dado el siguiente array de productos en stock, agregar a cada producto un atributo booleano agotado en true si el stock es mayor a
0, caso contrario false.
const productos = [
{ id: "1", nombre: "lapiceras", stock: 164 },
{ id: "2", nombre: "marcadores", stock: 0 },
{ id: "3", nombre: "cartulinas", stock: 25 },
{ id: "4", nombre: "cartucheras", stock: 0 },
{ id: "5", nombre: "mochilas", stock: 4 }
]
localhost:8000/print 30/37
31/5/2021 localhost:8000/print
resultado esperando
[
{ id: "1", nombre: "lapiceras", stock: 164, agotado: false },
{ id: "2", nombre: "marcadores", stock: 0, agotado: true },
{ id: "3", nombre: "cartulinas", stock: 25, agotado: false },
{ id: "4", nombre: "cartucheras", stock: 0, agotado: true },
{ id: "5", nombre: "mochilas", stock: 4, agotado: false }
]
localhost:8000/print 31/37
31/5/2021 localhost:8000/print
3. Jugadores sospechosos
En nuestro juego online tenemos un array de usuarios sospechosos que están usando un item que fue prohibido, obtener la lista
de IDs de usuarios que en su inventario tengan dicho item. El item prohibido se llama "Katana de fuego".
const jugadores = [
{ ID: "1", clase: "mago", nivel: 35, inventario:
["Manzana", "Poción de maná", "Vara mágica"] },
{ ID: "2", clase: "ladron", nivel: 65, inventario:
["Daga", "Katana de fuego", "Poción de vida"] },
{ ID: "4", clase: "curandero", nivel: 73, inventario:
["Vara mágica", "Armadura ligera"] },
{ ID: "3", clase: "espadachin", nivel: 36, inventario:
["Casco de hierro", "Katana de fuego", "Pocíón de velocidad"] },
{ ID: "5", clase: "mago", nivel: 26, inventario:
["Carta de PecoPeco", "Oridecon", "Poción de concentración"] },
]
localhost:8000/print 32/37
31/5/2021 localhost:8000/print
resultado esperando
["2", "3"]
localhost:8000/print 33/37
31/5/2021 localhost:8000/print
4. Silabas
Nuestro software de reconocimiento de voz funciona de una forma un poco particualar, y el texto reconocido nos lo envía en un
arreglo de silabas. Dado el siguiente array, obtener un string con todo el texto de corrido.
const silabas = ["¡Ho", "la, ", "mun", "do! ", "¿To", "do", "bien?", "Me", "a", "le", "gro."]
resultado esperado
localhost:8000/print 34/37
31/5/2021 localhost:8000/print
5. Pedidos
Tenemos un array con pedidos para nuestro negocio de comidas. Obtener un array con solo aquellos pedidos que incluyan algun
condimento extra.
const pedidos = [
{ id: "1", pedido: "hamburgesa", extras: ["mayonesa"] },
{ id: "1", pedido: "pancho" },
{ id: "1", pedido: "pizza" },
{ id: "1", pedido: "pancho", extras: ["ketchup"] },
{ id: "1", pedido: "empanadas" },
]
localhost:8000/print 35/37
31/5/2021 localhost:8000/print
resultado esperando
[
{ id: "1", pedido: "hamburgesa", extras: ["mayonesa"] },
{ id: "1", pedido: "pancho", extras: ["ketchup"] }
]
localhost:8000/print 36/37
31/5/2021 localhost:8000/print
6. Usuario y su perfil
Tenemos dos objetos, uno con la información de usuario, y otro con la información personal de dicho usuario, queremos obtener
un solo objeto con toda la información.
resultado esperado
{ id: "123", username: "pepe24", nombre: "pepe", edad: 27, profesion: "programador" }
localhost:8000/print 37/37