1
00:00:01,180 --> 00:00:04,460
Tratar y trabajar con datos es lo principal

2
00:00:04,460 --> 00:00:06,820
que hacemos como desarrolladores.

3
00:00:06,820 --> 00:00:08,150
Y esa es la razón por la cual,

4
00:00:08,150 --> 00:00:10,010
desde el comienzo del curso,

5
00:00:10,010 --> 00:00:11,070
nosotros hemos estado trabajando

6
00:00:11,070 --> 00:00:13,980
con estructuras de datos integradas en JavaScript,

7
00:00:13,980 --> 00:00:16,800
como arreglos y objetos.

8
00:00:16,800 --> 00:00:18,740
Luego, en las últimas conferencias

9
00:00:18,740 --> 00:00:21,550
aprendimos sobre dos nuevas estructuras de datos

10
00:00:21,550 --> 00:00:24,470
que son conjuntos y objetos.

11
00:00:24,470 --> 00:00:26,840
Así que ahora tenemos cuatro estructuras de datos

12
00:00:26,840 --> 00:00:28,690
entre los que podemos elegir.

13
00:00:28,690 --> 00:00:31,710
Y entonces decidí crear esta conferencia rápida

14
00:00:31,710 --> 00:00:35,750
que le mostrará los pros y los contras de cada estructura de datos

15
00:00:35,750 --> 00:00:38,363
y también cuándo elegir cada uno de ellos.

16
00:00:40,380 --> 00:00:43,470
Y quiero comenzar este video categorizando rápidamente

17
00:00:43,470 --> 00:00:46,800
de dónde pueden provenir realmente los datos.

18
00:00:46,800 --> 00:00:50,690
Así que hay esencialmente tres fuentes de datos.

19
00:00:50,690 --> 00:00:52,610
En primer lugar, los datos se pueden escribir

20
00:00:52,610 --> 00:00:56,970
dentro del propio código fuente del programa como mensajes de estado

21
00:00:56,970 --> 00:01:01,840
que se mostrará en una página web en función de las acciones del usuario.

22
00:01:01,840 --> 00:01:05,300
En segundo lugar, los datos pueden provenir de la interfaz de usuario.

23
00:01:05,300 --> 00:01:07,090
Así que desde la página web,

24
00:01:07,090 --> 00:01:11,430
pueden ser datos que el usuario ingresa en algún formulario

25
00:01:11,430 --> 00:01:15,330
o prueba de datos ya escrita de alguna manera en el DOM.

26
00:01:15,330 --> 00:01:19,430
Por ejemplo, estas pueden ser las tareas de los usuarios en una aplicación de tareas pendientes.

27
00:01:19,430 --> 00:01:24,140
o gastos en una aplicación de presupuesto o algo por el estilo.

28
00:01:24,140 --> 00:01:27,870
Finalmente, los datos pueden provenir de fuentes externas

29
00:01:27,870 --> 00:01:30,970
que suele ser una API web.

30
00:01:30,970 --> 00:01:33,700
Ahora, ¿qué es una API web?

31
00:01:33,700 --> 00:01:38,110
Bueno, API significa Interfaz de programación de aplicaciones.

32
00:01:38,110 --> 00:01:41,420
y básicamente podemos usar una API web para obtener datos

33
00:01:41,420 --> 00:01:44,020
de otras aplicaciones web.

34
00:01:44,020 --> 00:01:46,620
Por ejemplo podemos usar una API web

35
00:01:46,620 --> 00:01:50,890
para obtener el clima actual en cualquier ciudad o datos sobre películas

36
00:01:50,890 --> 00:01:53,140
o tasas de conversión de moneda

37
00:01:53,140 --> 00:01:56,760
y realmente todo tipo de datos que puedas imaginar.

38
00:01:56,760 --> 00:02:00,073
Y aprenderemos cómo funciona todo eso más adelante en el curso.

39
00:02:00,970 --> 00:02:03,810
Así que no importa de dónde vengan los datos

40
00:02:03,810 --> 00:02:06,010
y qué tipo de datos son,

41
00:02:06,010 --> 00:02:09,140
normalmente siempre tenemos colecciones de datos

42
00:02:09,140 --> 00:02:12,040
que luego necesitamos almacenar en algún lugar.

43
00:02:12,040 --> 00:02:15,330
Entonces, ¿dónde almacenamos colecciones de datos?

44
00:02:15,330 --> 00:02:19,550
Así es, usamos estructuras de datos, pero como sabes

45
00:02:19,550 --> 00:02:23,440
Hay cuatro estructuras de datos integradas en JavaScript.

46
00:02:23,440 --> 00:02:27,200
Y ahora necesitamos una forma de decidir entre ellos,

47
00:02:27,200 --> 00:02:29,260
pero no es tan dificil

48
00:02:29,260 --> 00:02:31,760
Así que la primera decisión es esta

49
00:02:31,760 --> 00:02:34,810
¿Solo necesitamos una lista simple de valores?

50
00:02:34,810 --> 00:02:39,210
Si es así, usaremos una matriz o un conjunto.

51
00:02:39,210 --> 00:02:42,650
Pero, por otro lado, si necesitamos pares de valores clave,

52
00:02:42,650 --> 00:02:45,083
entonces necesitamos un objeto o un mapa.

53
00:02:45,940 --> 00:02:49,730
Entonces, la gran diferencia aquí es que con un par de valores clave

54
00:02:49,730 --> 00:02:53,853
tenemos una manera de describir los valores, entonces usando la clave.

55
00:02:54,750 --> 00:02:58,860
Por otro lado, en una lista como una matriz o un conjunto,

56
00:02:58,860 --> 00:03:03,860
simplemente tenemos los valores sin ninguna descripción, ¿de acuerdo?

57
00:03:04,050 --> 00:03:05,780
Ahora, como un ejemplo rápido,

58
00:03:05,780 --> 00:03:09,400
volvamos a obtener datos de una API web

59
00:03:09,400 --> 00:03:12,170
porque en las aplicaciones JavaScript modernas

60
00:03:12,170 --> 00:03:15,730
esa suele ser la fuente de datos más común.

61
00:03:15,730 --> 00:03:20,670
Por lo tanto, los datos de las API web generalmente vienen en un formato de datos especial

62
00:03:20,670 --> 00:03:25,070
llamado JSON que se parece a este ejemplo aquí.

63
00:03:25,070 --> 00:03:29,640
Entonces, JSON es esencialmente solo texto, por lo que es una cadena larga,

64
00:03:29,640 --> 00:03:33,030
pero se puede convertir fácilmente en objetos de JavaScript

65
00:03:33,030 --> 00:03:35,500
porque usa el mismo formato

66
00:03:35,500 --> 00:03:38,343
como objetos y matrices de JavaScript.

67
00:03:39,190 --> 00:03:43,200
Así que aquí tenemos tres objetos que describen recetas.

68
00:03:43,200 --> 00:03:47,380
Tenemos los valores en verde, como el título y una editorial.

69
00:03:47,380 --> 00:03:48,940
Y tiene completo sentido

70
00:03:48,940 --> 00:03:53,220
que estos valores se describen luego usando una clave.

71
00:03:53,220 --> 00:03:55,430
De lo contrario no tendríamos idea

72
00:03:55,430 --> 00:03:59,220
cuáles son los diferentes valores en realidad, ¿verdad?

73
00:03:59,220 --> 00:04:02,080
Entonces, los pares de valores clave son esenciales aquí.

74
00:04:02,080 --> 00:04:05,480
y es por eso que estos datos se almacenan en un objeto,

75
00:04:05,480 --> 00:04:07,380
no una matriz.

76
00:04:07,380 --> 00:04:10,550
Ahora, cada uno de estos objetos de receta en sí mismo

77
00:04:10,550 --> 00:04:12,760
puede ser visto como un valor.

78
00:04:12,760 --> 00:04:14,660
Y como tenemos muchos de ellos,

79
00:04:14,660 --> 00:04:17,960
significa que tenemos nuevamente una colección de datos

80
00:04:17,960 --> 00:04:22,130
y por lo tanto necesitamos una estructura de datos para almacenarlos.

81
00:04:22,130 --> 00:04:26,210
Ahora, ¿queremos describir cada uno de los objetos?

82
00:04:26,210 --> 00:04:29,660
Bueno, no es realmente necesario, ¿verdad?

83
00:04:29,660 --> 00:04:32,600
Ya sabemos que son todas recetas.

84
00:04:32,600 --> 00:04:35,900
y cualquier información que necesitemos sobre las recetas

85
00:04:35,900 --> 00:04:39,750
ya está almacenado en cada uno de los objetos.

86
00:04:39,750 --> 00:04:42,900
Así que todo lo que queremos es básicamente una lista simple

87
00:04:42,900 --> 00:04:45,820
donde se mantienen juntas todas las recetas.

88
00:04:45,820 --> 00:04:50,820
Y aquí una matriz es la estructura de datos perfecta para la deuda.

89
00:04:50,870 --> 00:04:54,190
Y, de hecho, crear una matriz de objetos

90
00:04:54,190 --> 00:04:57,260
es extremadamente común en JavaScript.

91
00:04:57,260 --> 00:05:01,020
Ahora trabajará con este tipo de datos todo el tiempo.

92
00:05:01,020 --> 00:05:03,670
como desarrollador profesional de JavaScript.

93
00:05:03,670 --> 00:05:06,973
Y es por eso que estoy poniendo tanto énfasis en esto aquí.

94
00:05:07,840 --> 00:05:12,440
Bien, ahora antes de pasar a comparar arreglos, conjuntos,

95
00:05:12,440 --> 00:05:15,780
objetos y mapas, quiero mencionar rápidamente

96
00:05:15,780 --> 00:05:18,634
que también hay Debilidades

97
00:05:18,634 --> 00:05:22,270
y estructuras de datos WeakMaps en JavaScript.

98
00:05:22,270 --> 00:05:25,100
Además, hay aún más estructuras de datos

99
00:05:25,100 --> 00:05:26,970
que se utilizan en la programación,

100
00:05:26,970 --> 00:05:30,060
pero que no están integrados en JavaScript.

101
00:05:30,060 --> 00:05:31,700
Y solo por mencionar algunos,

102
00:05:31,700 --> 00:05:35,630
pueden ser pilas, colas, listas enlazadas, árboles,

103
00:05:35,630 --> 00:05:37,470
o tablas hash.

104
00:05:37,470 --> 00:05:39,650
Y estos realmente no importan por ahora

105
00:05:39,650 --> 00:05:42,090
pero aún así solo quería que supieras

106
00:05:42,090 --> 00:05:43,750
que hay más que solo

107
00:05:43,750 --> 00:05:46,103
las cuatro estructuras de datos integradas.

108
00:05:47,810 --> 00:05:49,640
Pero ahora hablemos un poco más

109
00:05:49,640 --> 00:05:52,750
sobre las estructuras de datos integradas.

110
00:05:52,750 --> 00:05:56,750
Así que ya sabes a estas alturas cómo usarlas todas,

111
00:05:56,750 --> 00:06:00,360
pero es importante saber cuándo usarlos.

112
00:06:00,360 --> 00:06:05,020
Entonces, comenzando con arreglos versus conjuntos, ya sabemos

113
00:06:05,020 --> 00:06:08,720
que deberíamos usarlos para listas simples de valores

114
00:06:08,720 --> 00:06:11,523
cuando no necesitamos describir los valores.

115
00:06:12,600 --> 00:06:16,230
Ahora debe usar matrices cada vez que necesite almacenar valores

116
00:06:16,230 --> 00:06:21,020
en orden y cuándo estos valores pueden contener duplicados.

117
00:06:21,020 --> 00:06:23,200
Además, siempre debes usar matrices.

118
00:06:23,200 --> 00:06:25,300
cuando necesitas manipular datos

119
00:06:25,300 --> 00:06:29,240
porque hay un montón de métodos de matriz útiles.

120
00:06:29,240 --> 00:06:32,090
Ahora los conjuntos, por otro lado, solo deben usarse

121
00:06:32,090 --> 00:06:35,230
cuando se trabaja con valores únicos,

122
00:06:35,230 --> 00:06:38,780
además de eso también puedes usar conjuntos en situaciones

123
00:06:38,780 --> 00:06:42,000
cuando el alto rendimiento es realmente importante

124
00:06:42,000 --> 00:06:45,060
porque operaciones como buscar un artículo

125
00:06:45,060 --> 00:06:47,670
o eliminar un elemento de un conjunto puede ser

126
00:06:47,670 --> 00:06:52,260
hasta 10 veces más rápido en conjuntos que en arreglos.

127
00:06:52,260 --> 00:06:55,160
Ahora un gran caso de uso para conjuntos

128
00:06:55,160 --> 00:06:57,963
es eliminar valores duplicados de una matriz

129
00:06:57,963 --> 00:07:01,180
como ya lo hicimos antes.

130
00:07:01,180 --> 00:07:04,640
Entonces, los conjuntos realmente no están destinados a reemplazar matrices

131
00:07:04,640 --> 00:07:06,300
sino más bien para felicitarlos

132
00:07:06,300 --> 00:07:10,280
siempre que se trate de valores únicos.

133
00:07:10,280 --> 00:07:15,000
Bien, ahora hablemos de objetos versus mapas.

134
00:07:15,000 --> 00:07:16,550
y ya sabemos que debemos

135
00:07:16,550 --> 00:07:19,910
use estas estructuras de datos de valor clave

136
00:07:19,910 --> 00:07:24,890
siempre que necesitemos describir los valores usando claves, ¿verdad?

137
00:07:24,890 --> 00:07:29,050
Pero cuándo usar objetos y cuándo usar mapas.

138
00:07:29,050 --> 00:07:31,200
Bueno, los objetos han sido

139
00:07:31,200 --> 00:07:34,090
la estructura tradicional de datos de valor clave

140
00:07:34,090 --> 00:07:38,700
simplemente porque no teníamos mapas antes de ES6,

141
00:07:38,700 --> 00:07:41,960
pero usando objetos simplemente como almacenes de valor clave

142
00:07:41,960 --> 00:07:44,750
tiene un par de desventajas técnicas.

143
00:07:44,750 --> 00:07:46,410
Y es por eso que algunas personas dicen

144
00:07:46,410 --> 00:07:49,910
que hemos estado abusando de los objetos para esto.

145
00:07:49,910 --> 00:07:52,860
Ahora los mapas, por otro lado, se adaptan mucho mejor

146
00:07:52,860 --> 00:07:55,140
para almacenes de valores clave simples

147
00:07:55,140 --> 00:07:58,620
porque ofrecen un mejor rendimiento de hecho.

148
00:07:58,620 --> 00:08:02,240
También las claves de mapa pueden tener cualquier tipo de datos.

149
00:08:02,240 --> 00:08:04,590
y también son fáciles de iterar

150
00:08:04,590 --> 00:08:08,350
y es fácil calcular el tamaño de un mapa.

151
00:08:08,350 --> 00:08:11,160
Sin embargo, la mayor ventaja de los objetos

152
00:08:11,160 --> 00:08:15,590
es probablemente lo fácil que es escribirlos y acceder a los datos

153
00:08:15,590 --> 00:08:19,770
simplemente usando el punto o el operador de corchetes.

154
00:08:19,770 --> 00:08:24,460
Además, la mayoría de los desarrolladores ya están súper acostumbrados a los objetos.

155
00:08:24,460 --> 00:08:26,810
Y entonces simplemente siguen usándolos.

156
00:08:26,810 --> 00:08:28,923
para almacenes de valores clave simples.

157
00:08:30,000 --> 00:08:33,170
De todos modos, como conclusión deberías usar mapas.

158
00:08:33,170 --> 00:08:36,600
cuando simplemente necesita asignar claves a valores

159
00:08:36,600 --> 00:08:39,940
y también cuando necesitas claves que no sean cadenas

160
00:08:39,940 --> 00:08:42,330
porque como vimos en el último video,

161
00:08:42,330 --> 00:08:44,663
eso puede ser muy poderoso a veces.

162
00:08:45,590 --> 00:08:48,130
Ahora, si necesitas funciones como valores

163
00:08:48,130 --> 00:08:51,670
entonces absolutamente deberías usar un objeto para eso.

164
00:08:51,670 --> 00:08:55,540
Entonces, en los objetos, estas funciones se llaman métodos.

165
00:08:55,540 --> 00:08:58,420
y puede usar esta palabra clave para acceder a las propiedades

166
00:08:58,420 --> 00:09:02,790
del mismo objeto, lo cual es imposible en los mapas.

167
00:09:02,790 --> 00:09:05,350
Además, al trabajar con datos JSON,

168
00:09:05,350 --> 00:09:07,990
como vimos en la luz anterior

169
00:09:07,990 --> 00:09:11,310
probablemente también usarás objetos para eso

170
00:09:11,310 --> 00:09:14,680
a menos que desee convertir los objetos en mapas,

171
00:09:14,680 --> 00:09:17,163
pero eso generalmente no es algo que hacemos.

172
00:09:18,020 --> 00:09:21,630
Entonces, de hecho, todavía usamos objetos todo el tiempo

173
00:09:21,630 --> 00:09:25,550
pero los mapas también son una estructura de datos muy importante en este momento

174
00:09:25,550 --> 00:09:27,873
y mucho más importante que los conjuntos.

175
00:09:28,930 --> 00:09:32,990
Genial, y con eso, terminamos este resumen.

176
00:09:32,990 --> 00:09:37,023
Espero que hayas encontrado esto útil, así que ahora sigamos adelante.