WeakMap and WeakSet by vplentinax · Pull Request #176 · javascript-tutorial/es.javascript.info · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions 1-js/05-data-types/weakmap-weakset/01-recipients-read/solution.md
23 changes: 23 additions & 0 deletions 1-js/05-data-types/weakmap-weakset/01-recipients-read/task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
importance: 5

---

# Almacenar banderas "no leídas"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mencionaba Joaquin que banderas se deja como flags, tal como hace MDN


Hay un array de mensajes:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

array es arreglo, incluso MDN dice arreglo

```js
let messages = [
{text: "Hello", from: "John"},
{text: "How goes?", from: "John"},
{text: "See you soon", from: "Alice"}
];
```

Su código puede acceder a él, pero los mensajes son administrados por el código de otra persona. Se agregan mensajes nuevos, los códigos viejos se eliminan regularmente con ese código, y usted no sabe los momentos exactos en que sucede.

Ahora, ¿qué estructura de datos podría usar para almacenar información sobre si el mensaje "ha sido leído"? La estructura debe ser adecuada para dar la respuesta "¿se leyó?" para el objeto del mensaje dado.

P.D Cuando un mensaje se elimina de `messages`, también debería desaparecer de su estructura.

P.P.D. No debemos modificar los objetos del mensaje, o agregarles nuestras propiedades. Como son administrados por el código de otra persona, eso puede generarnos resultados no deseados.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@

Para almacenar una fecha, podemos usar `WeakMap`:

```js
let messages = [
{text: "Hello", from: "John"},
{text: "How goes?", from: "John"},
{text: "See you soon", from: "Alice"}
];

let readMap = new WeakMap();

readMap.set(messages[0], new Date(2017, 1, 1));
// // Obeto Date que estudiaremos más tarde
```
21 changes: 21 additions & 0 deletions 1-js/05-data-types/weakmap-weakset/02-recipients-when-read/task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
importance: 5

---

# Almacenar fechas de lectura

Hay un array semejante al de la actividad anterior [previous task](info:task/recipients-read). La sitación es similar:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


```js
let messages = [
{text: "Hello", from: "John"},
{text: "How goes?", from: "John"},
{text: "See you soon", from: "Alice"}
];
```

La pregunta ahora es: ¿qué estructura de datos es la adecuada para almacenar la información: "cuando se leyó el mensaje?".

En la tarea anterior solo necesitábamos almacenar el hecho de "sí / no". Ahora necesitamos almacenar la fecha, y solo debe permanecer en la memoria hasta que el mensaje sea recolectado como basura.

P.D Las fechas se pueden almacenar como objetos de la clase incorporada `Date`, que cubriremos más adelante.
288 changes: 288 additions & 0 deletions 1-js/05-data-types/weakmap-weakset/article.md