Skip to content

Commit cf4250f

Browse files
authored
Merge pull request #240 from ockley/master
WeakMap and WeakSet
2 parents da14ef4 + e3cc980 commit cf4250f

5 files changed

Lines changed: 129 additions & 129 deletions

File tree

1-js/05-data-types/08-weakmap-weakset/01-recipients-read/solution.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,35 @@ let messages = [
99

1010
let readMessages = new WeakSet();
1111

12-
// two messages have been read
12+
// to beskeder er læst
1313
readMessages.add(messages[0]);
1414
readMessages.add(messages[1]);
15-
// readMessages has 2 elements
15+
// readMessages har 2 elementer
1616

17-
// ...let's read the first message again!
17+
// ...lad os læse den første besked igen!
1818
readMessages.add(messages[0]);
19-
// readMessages still has 2 unique elements
19+
// readMessages stadig har 2 unikke elementer
2020

21-
// answer: was the message[0] read?
22-
alert("Read message 0: " + readMessages.has(messages[0])); // true
21+
// svar: var message[0] læst?
22+
alert("Er besked 0 læst: " + readMessages.has(messages[0])); // true
2323

2424
messages.shift();
25-
// now readMessages has 1 element (technically memory may be cleaned later)
25+
// nu har readMessages 1 element (teknisk set kan hukommelsen ryddes senere)
2626
```
2727

28-
The `WeakSet` allows to store a set of messages and easily check for the existence of a message in it.
28+
Et `WeakSet` tillader at gemme et sæt af beskeder og nemt kontrollere, om en besked findes i det.
2929

30-
It cleans up itself automatically. The tradeoff is that we can't iterate over it, can't get "all read messages" from it directly. But we can do it by iterating over all messages and filtering those that are in the set.
30+
Det rydder automatisk op i sig selv. Ulempen er, at vi ikke kan iterere over det, og vi kan ikke få "alle læste beskeder" direkte fra det. Men vi kan gøre det ved at iterere over alle beskeder og filtrere dem, der er i sættet.
3131

32-
Another, different solution could be to add a property like `message.isRead=true` to a message after it's read. As messages objects are managed by another code, that's generally discouraged, but we can use a symbolic property to avoid conflicts.
32+
En anden, forskellig løsning kunne være at tilføje en egenskab som `message.isRead=true` til en besked, efter den er læst. Da beskedobjekter styres af en anden kode, er det generelt ikke anbefalet, men vi kan bruge en symbolsk egenskab for at undgå konflikter.
3333

34-
Like this:
34+
Som dette:
3535
```js
36-
// the symbolic property is only known to our code
36+
// den symbolske egenskab er kun kendt af vores kode
3737
let isRead = Symbol("isRead");
3838
messages[0][isRead] = true;
3939
```
4040

41-
Now third-party code probably won't see our extra property.
41+
Nu vil 3de-parts kode sandsynligvis ikke se vores ekstra egenskab.
4242

43-
Although symbols allow to lower the probability of problems, using `WeakSet` is better from the architectural point of view.
43+
Selvom symboler reducerer sandsynligheden for problemer, er brugen af `WeakSet` bedre fra et arkitektonisk synspunkt.

1-js/05-data-types/08-weakmap-weakset/01-recipients-read/task.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@ importance: 5
22

33
---
44

5-
# Store "unread" flags
5+
# Opbevar "ulæste" flag
66

7-
There's an array of messages:
7+
Her er et array af beskeder:
88

99
```js
1010
let messages = [
11-
{text: "Hello", from: "John"},
12-
{text: "How goes?", from: "John"},
13-
{text: "See you soon", from: "Alice"}
11+
{text: "Hej", from: "John"},
12+
{text: "Hvordan går det?", from: "John"},
13+
{text: "Vi ses snart", from: "Alice"}
1414
];
1515
```
1616

17-
Your code can access it, but the messages are managed by someone else's code. New messages are added, old ones are removed regularly by that code, and you don't know the exact moments when it happens.
17+
Din kode kan tilgå det, men beskederne styres af en andens kode. Nye beskeder tilføjes, gamle fjernes regelmæssigt af den kode, og du kender ikke de præcise tidspunkter, hvor det sker.
1818

19-
Now, which data structure could you use to store information about whether the message "has been read"? The structure must be well-suited to give the answer "was it read?" for the given message object.
19+
Hvilken datastruktur kunne du bruge til at gemme information om, hvorvidt beskeden "er blevet læst"? Strukturen skal være velegnet til at give svaret "blev den læst?" for det givne beskedobjekt.
2020

21-
P.S. When a message is removed from `messages`, it should disappear from your structure as well.
21+
P.S. Når en besked fjernes fra `messages`, skal den også forsvinde fra din struktur.
2222

23-
P.P.S. We shouldn't modify message objects, add our properties to them. As they are managed by someone else's code, that may lead to bad consequences.
23+
P.P.S. Vi bør ikke ændre beskedobjekterne ved at tilføje vores egne egenskaber til dem. Da de styres af en andens kode, kan det føre til uønskede konsekvenser.
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11

2-
To store a date, we can use `WeakMap`:
2+
For at gemme en dato, kan vi bruge `WeakMap`:
33

44
```js
55
let messages = [
6-
{text: "Hello", from: "John"},
7-
{text: "How goes?", from: "John"},
8-
{text: "See you soon", from: "Alice"}
6+
{text: "Hej", from: "John"},
7+
{text: "Hvordan går det?", from: "John"},
8+
{text: "Vi ses snart", from: "Alice"}
99
];
1010

1111
let readMap = new WeakMap();
1212

1313
readMap.set(messages[0], new Date(2017, 1, 1));
14-
// Date object we'll study later
14+
// Date objektet vil vi studere senere
1515
```

1-js/05-data-types/08-weakmap-weakset/02-recipients-when-read/task.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@ importance: 5
22

33
---
44

5-
# Store read dates
5+
# Gem datoer for læsning
66

7-
There's an array of messages as in the [previous task](info:task/recipients-read). The situation is similar.
7+
Der er et array af beskeder som i [forrige opgave](info:task/recipients-read). Situationen er lignende.
88

99
```js
1010
let messages = [
11-
{text: "Hello", from: "John"},
12-
{text: "How goes?", from: "John"},
13-
{text: "See you soon", from: "Alice"}
11+
{text: "Hej", from: "John"},
12+
{text: "Hvordan går det?", from: "John"},
13+
{text: "Vi ses snart", from: "Alice"}
1414
];
1515
```
1616

17-
The question now is: which data structure you'd suggest to store the information: "when the message was read?".
17+
Spørgsmålet nu er: hvilken datastruktur vil du foreslå til at gemme informationen: "hvornår blev beskeden læst?".
1818

19-
In the previous task we only needed to store the "yes/no" fact. Now we need to store the date, and it should only remain in memory until the message is garbage collected.
19+
I den forrige opgave skulle vi kun gemme "ja/nej"-faktumet. Nu skal vi gemme datoen, og den skal kun forblive i hukommelsen, indtil beskeden bliver garbage collected.
2020

21-
P.S. Dates can be stored as objects of built-in `Date` class, that we'll cover later.
21+
P.S. Datoer kan gemmes som objekter af den indbyggede `Date`-klasse, som vi dækker senere.

0 commit comments

Comments
 (0)