Skip to content

Commit 1fdd99d

Browse files
authored
Merge pull request #1 from slopesneves/07-map-and-set
Map and Set : french translation
2 parents f849762 + 3fee829 commit 1fdd99d

File tree

1 file changed

+117
-100
lines changed

1 file changed

+117
-100
lines changed
Lines changed: 117 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,98 @@
11

22
# Map and Set
33

4-
Now we've learned about the following complex data structures:
4+
Nous avons découvert les structures de données complexes suivantes :
55

6-
- Objects for storing keyed collections.
7-
- Arrays for storing ordered collections.
6+
- Objects (les objets) pour stocker des valeurs par clés.
7+
- Arrays (les tableaux) pour stocker des valeurs en conservant l'ordre d'insertion.
8+
9+
Il existe aussi `Map` (les dictionnaires de données) et `Set` (les ensembles) qui sont très utiles dans notre quotidien de développeur.
810

9-
But that's not enough for real life. That's why `Map` and `Set` also exist.
1011

1112
## Map
1213

13-
[Map](mdn:js/Map) is a collection of keyed data items, just like an `Object`. But the main difference is that `Map` allows keys of any type.
14+
Une [Map](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Map) (dictionnaire de donnée) permet, comme pour un `Object`, de stocker plusieurs éléments sous la forme de clés valeurs. Sauf que cette fois, les clés peuvent être de n'importe qu'elle type.
1415

15-
Methods and properties are:
16+
Voici les méthodes et les propriétés d'une `Map` :
1617

17-
- `new Map()` -- creates the map.
18-
- `map.set(key, value)` -- stores the value by the key.
19-
- `map.get(key)` -- returns the value by the key, `undefined` if `key` doesn't exist in map.
20-
- `map.has(key)` -- returns `true` if the `key` exists, `false` otherwise.
21-
- `map.delete(key)` -- removes the value by the key.
22-
- `map.clear()` -- removes everything from the map.
23-
- `map.size` -- returns the current element count.
18+
- `new Map()` -- instancie la map.
19+
- `map.set(key, value)` -- définie la valeur pour une clé.
20+
- `map.get(key)` -- retourne la valeur associée à la clé, `undefined` si `key` n'existe pas dans la map.
21+
- `map.has(key)` -- retourne `true` si `key` existe, sinon `false`.
22+
- `map.delete(key)` -- supprime la valeur associée à `key`
23+
- `map.clear()` -- supprime tout le contenu de la map.
24+
- `map.size` -- retourne le nombre d'éléments.
2425

25-
For instance:
26+
Par exemple :
2627

2728
```js run
2829
let map = new Map();
2930

30-
map.set('1', 'str1'); // a string key
31-
map.set(1, 'num1'); // a numeric key
32-
map.set(true, 'bool1'); // a boolean key
31+
map.set('1', 'str1'); // une clé de type chaîne de caractère
32+
map.set(1, 'num1'); // une clé de type numérique
33+
map.set(true, 'bool1'); // une clé de type booléenne
34+
35+
// souvenez-vous, dans un `Object`, les clés sont converties en chaîne de caractères
36+
// alors que `Map` conserve le type d'origine de la clé,
37+
// c'est pourquoi les deux appels suivants retournent des valeurs différentes:
3338

34-
// remember the regular Object? it would convert keys to string
35-
// Map keeps the type, so these two are different:
3639
alert( map.get(1) ); // 'num1'
3740
alert( map.get('1') ); // 'str1'
3841

3942
alert( map.size ); // 3
4043
```
4144

42-
As we can see, unlike objects, keys are not converted to strings. Any type of key is possible.
45+
Au travers de cet exemple nous pouvons voir, qu'à la différence des `Objects`, les clés ne sont pas converties en chaîne de caractère.
46+
Il est donc possible d'utiliser n'importe quel type.
4347

44-
**Map can also use objects as keys.**
48+
**On peut aussi utiliser les `Objects` comme clé dans une `Map`.**
4549

46-
For instance:
50+
Par exemple:
4751

4852
```js run
4953
let john = { name: "John" };
5054

51-
// for every user, let's store their visits count
55+
// pour chaque utilisateur, nous stockons le nombre de visites
5256
let visitsCountMap = new Map();
5357

54-
// john is the key for the map
58+
// john est utilisé comme clé dans la map
5559
visitsCountMap.set(john, 123);
5660

5761
alert( visitsCountMap.get(john) ); // 123
5862
```
5963

60-
Using objects as keys is one of most notable and important `Map` features. For string keys, `Object` can be fine, but not for object keys.
64+
Pourvoir utiliser un `Object` comme une clé est l'une des raisons principales d'utiliser une `Map`.
65+
`Map` est à privilégier à `Object` lorsque que l'on utilise autre chose que des chaînes de caractères comme clé.
6166

62-
Let's try:
67+
Essayons de faire comme l'exemple précédent directement avec un `Object`:
6368

6469
```js run
6570
let john = { name: "John" };
6671

67-
let visitsCountObj = {}; // try to use an object
72+
let visitsCountObj = {}; // on créé notre object
6873

69-
visitsCountObj[john] = 123; // try to use john object as the key
74+
visitsCountObj[john] = 123; // on souhaite utiliser john comme clé
7075

7176
*!*
72-
// That's what got written!
77+
// Et voilà ce que l'on obtient !
7378
alert( visitsCountObj["[object Object]"] ); // 123
7479
*/!*
7580
```
81+
`visitsCountObj` est un objet, de ce fait, toutes les clés, comme `john`, sont transformées en chaîne de caractères.
82+
C'est pourquoi nous obtenons comme valeur de clé `"[object Object]"`. Ce n'est clairement pas ce que l'on souhaite.
7683

77-
As `visitsCountObj` is an object, it converts all keys, such as `john` to strings, so we've got the string key `"[object Object]"`. Definitely not what we want.
84+
```smart header="Comment `Map` compare les clés"
7885

79-
```smart header="How `Map` compares keys"
80-
To test keys for equivalence, `Map` uses the algorithm [SameValueZero](https://tc39.github.io/ecma262/#sec-samevaluezero). It is roughly the same as strict equality `===`, but the difference is that `NaN` is considered equal to `NaN`. So `NaN` can be used as the key as well.
86+
Pour tester l'égalité entre les clés, `Map` se base sur l'algorithme [SameValueZero](https://tc39.github.io/ecma262/#sec-samevaluezero).
87+
C'est grosso modo la même chose que l'opérateur de stricte égalité `===`, à la différence que `NaN` est considéré comme étant égal à `NaN`.
88+
`NaN` peut donc être utilisé comme clé.
8189

82-
This algorithm can't be changed or customized.
90+
Cet algorithme ne peut pas peut être modifié.
8391
```
8492
8593
````smart header="Chaining"
86-
Every `map.set` call returns the map itself, so we can "chain" the calls:
94+
95+
Chaque appel à `map.set` retourne la map elle-même, ce qui nous permet d'enchaîner les appels:
8796
8897
```js
8998
map.set('1', 'str1')
@@ -92,22 +101,23 @@ map.set('1', 'str1')
92101
```
93102
````
94103
95-
## Map from Object
104+
## Map depuis Object
96105
97-
When a `Map` is created, we can pass an array (or another iterable) with key-value pairs for initialization, like this:
106+
Lorsqu'une `Map` est créée, nous pouvons utiliser un tableau (ou n'importe quel `iterable`) qui possède un couple clé-valeur.
98107
108+
Par exemple :
99109
```js
100-
// array of [key, value] pairs
110+
// un tableau avec couple [clé, valeur]
101111
let map = new Map([
102112
['1', 'str1'],
103113
[1, 'num1'],
104114
[true, 'bool1']
105115
]);
106116
```
107117
108-
If we have a plain object, and we'd like to create a `Map` from it, then we can use built-in method [Object.entries(obj)](mdn:js/Object/entries) that returns an array of key/value pairs for an object exactly in that format.
118+
Si nous voulons créer une `Map` à partir d'un `Object`, nous pouvons utiliser la méthode [Object.entries(obj)](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/entries) qui retourne un tableau de couple clé/valeur pour un objet qui respectent ce format.
109119
110-
So we can initialize a map from an object like this:
120+
Nous pouvons donc initialiser une `Map` à partir d'un objet de la manière suivante :
111121
112122
```js
113123
let obj = {
@@ -120,17 +130,17 @@ let map = new Map(Object.entries(obj));
120130
*/!*
121131
```
122132
123-
Here, `Object.entries` returns the array of key/value pairs: `[ ["name","John"], ["age", 30] ]`. That's what `Map` needs.
133+
`Object.entries` retourne le tableau de couple clé/valeur `[ ["name","John"], ["age", 30] ]` que nous pouvons utiliser pour créer notre `Map`.
124134
125-
## Iteration over Map
135+
## Parcourir les éléments d'une `Map`
126136
127-
For looping over a `map`, there are 3 methods:
137+
Il existe 3 façons de parcourir les éléments d'une `map` :
128138
129-
- `map.keys()` -- returns an iterable for keys,
130-
- `map.values()` -- returns an iterable for values,
131-
- `map.entries()` -- returns an iterable for entries `[key, value]`, it's used by default in `for..of`.
139+
- `map.keys()` -- retourne toutes les clés sous forme d'`iterable`,
140+
- `map.values()` -- retourne les valeurs sous forme d'`iterable`,
141+
- `map.entries()` -- retourne les `entries` (couple sous forme de `[clé, valeur]`), c'est la méthode utilisée par défaut par `for..of`.
132142
133-
For instance:
143+
Par exemple :
134144
135145
```js run
136146
let recipeMap = new Map([
@@ -139,53 +149,54 @@ let recipeMap = new Map([
139149
['onion', 50]
140150
]);
141151
142-
// iterate over keys (vegetables)
152+
// on parcourt les clés (les légumes)
143153
for (let vegetable of recipeMap.keys()) {
144154
alert(vegetable); // cucumber, tomatoes, onion
145155
}
146156
147-
// iterate over values (amounts)
157+
// on parcourt les valeurs (les montants)
148158
for (let amount of recipeMap.values()) {
149159
alert(amount); // 500, 350, 50
150160
}
151161
152-
// iterate over [key, value] entries
153-
for (let entry of recipeMap) { // the same as of recipeMap.entries()
154-
alert(entry); // cucumber,500 (and so on)
162+
// on parcourt les entries (couple [clé, valeur])
163+
for (let entry of recipeMap) { // équivalent à : recipeMap.entries()
164+
alert(entry); // cucumber,500 (etc...)
155165
}
156166
```
157167
158-
```smart header="The insertion order is used"
159-
The iteration goes in the same order as the values were inserted. `Map` preserves this order, unlike a regular `Object`.
168+
```smart header="L'ordre d'insertion est conservé"
169+
Contraitement aux `Object`, `Map` conserve l'ordre d'insertion des valeurs.
160170
```
161171
162-
Besides that, `Map` has a built-in `forEach` method, similar to `Array`:
172+
Il est aussi possible d'utiliser `forEach` avec `Map` comme on pourrait le faire avec un tableau :
163173
164174
```js
165-
// runs the function for each (key, value) pair
175+
// exécute la fonction pour chaque couple (key, value)
166176
recipeMap.forEach( (value, key, map) => {
167177
alert(`${key}: ${value}`); // cucumber: 500 etc
168178
});
169179
```
170180
171181
## Set
172182
173-
A `Set` is a special type collection - "set of values" (without keys), where each value may occur only once.
183+
`Set` est une liste sans doublons.
174184
175-
Its main methods are:
185+
Ses principales méthodes sont :
176186
177-
- `new Set(iterable)` -- creates the set, and if an `iterable` object is provided (usually an array), copies values from it into the set.
178-
- `set.add(value)` -- adds a value, returns the set itself.
179-
- `set.delete(value)` -- removes the value, returns `true` if `value` existed at the moment of the call, otherwise `false`.
180-
- `set.has(value)` -- returns `true` if the value exists in the set, otherwise `false`.
181-
- `set.clear()` -- removes everything from the set.
182-
- `set.size` -- is the elements count.
187+
- `new Set(iterable)` -- créé un `set`, si un `iterable` (la plupart du temps, un tableau) est passé en paramètre, ses valeurs sont copiées dans le `set`
188+
- `set.add(value)` -- ajoute l'élément `value` et retourne le `set`.
189+
- `set.delete(value)` -- supprime l'élément `value` et retourne `true` si la valeur existait au moment de l'appel sinon `false`.
190+
- `set.has(value)` -- retourne `true` si la valeur existe dans le `set`, sinon faux.
191+
- `set.clear()` -- supprime tout le contenu du `set`.
192+
- `set.size` -- le nombre d'éléments dans le tableau.
183193
184-
The main feature is that repeated calls of `set.add(value)` with the same value don't do anything. That's the reason why each value appears in a `Set` only once.
194+
Ce qu'il faut surtout savoir c'est que lorsque l'on appelle plusieurs fois `set.add(value)` avec la même valeur, la méthode ne fait rien.
195+
C'est pourquoi chaque valeur est unique dans un `Set`.
185196
186-
For example, we have visitors coming, and we'd like to remember everyone. But repeated visits should not lead to duplicates. A visitor must be "counted" only once.
197+
Par exemple, nous souhaitons nous souvenir de tous nos visiteurs. Mais chaque visiteurs doit être unique.
187198
188-
`Set` is just the right thing for that:
199+
`Set` est exactement ce qu'il nous faut :
189200
190201
```js run
191202
let set = new Set();
@@ -194,76 +205,82 @@ let john = { name: "John" };
194205
let pete = { name: "Pete" };
195206
let mary = { name: "Mary" };
196207
197-
// visits, some users come multiple times
208+
// visites, certains utilisateurs viennent plusieurs fois
198209
set.add(john);
199210
set.add(pete);
200211
set.add(mary);
201212
set.add(john);
202213
set.add(mary);
203214
204-
// set keeps only unique values
215+
// set conserve une fois chaque visiteurs
205216
alert( set.size ); // 3
206217
207218
for (let user of set) {
208-
alert(user.name); // John (then Pete and Mary)
219+
alert(user.name); // John (puis Pete et Mary)
209220
}
210221
```
211222
212-
The alternative to `Set` could be an array of users, and the code to check for duplicates on every insertion using [arr.find](mdn:js/Array/find). But the performance would be much worse, because this method walks through the whole array checking every element. `Set` is much better optimized internally for uniqueness checks.
223+
Nous aurions aussi pu utiliser un tableau (`Array`) en vérifiant avant chaque insertion que l'élément n'existe pas en utilisant
224+
[arr.find](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/find). Cependant les performances auraient été
225+
moins bonnes car cette méthode parcours chaque élément du tableau. `Set` est beaucoup plus efficace car il est optimisé en interne pour vérifier l'unicité des valeurs.
213226
214-
## Iteration over Set
227+
## Parcourir un Set
215228
216-
We can loop over a set either with `for..of` or using `forEach`:
229+
Nous pouvons parcourir les éléments d'un Set avec `for..of` ou en utilisant `forEach`
217230
218231
```js run
219232
let set = new Set(["oranges", "apples", "bananas"]);
220233
221234
for (let value of set) alert(value);
222235
223-
// the same with forEach:
236+
// même chose en utilisant forEach:
224237
set.forEach((value, valueAgain, set) => {
225238
alert(value);
226239
});
227240
```
228241
229-
Note the funny thing. The callback function passed in `forEach` has 3 arguments: a `value`, then *the same value* `valueAgain`, and then the target object. Indeed, the same value appears in the arguments twice.
242+
A noter que la fonction de callback utilisée par `forEach` prend 3 arguments en paramètres: une `value`, puis *la même valeur* `valueAgain`,
243+
et enfin le set lui-même.
244+
230245
231-
That's for compatibility with `Map` where the callback passed `forEach` has three arguments. Looks a bit strange, for sure. But may help to replace `Map` with `Set` in certain cases with ease, and vice versa.
246+
C'est pour des raisons de compatibilité avec `Map` que `forEach` prend en paramètre 3 arguments. C'est quelque peu surprenant, mais cela permet de
247+
remplacer facilement une `Map` par un `Set`.
232248
233-
The same methods `Map` has for iterators are also supported:
249+
Les méthodes pour parcourir les éléments d'une `Map` peuvent être utilisées :
234250
235-
- `set.keys()` -- returns an iterable object for values,
236-
- `set.values()` -- same as `set.keys()`, for compatibility with `Map`,
237-
- `set.entries()` -- returns an iterable object for entries `[value, value]`, exists for compatibility with `Map`.
251+
- `set.keys()` -- retourne un objet iterable contenant les valeurs,
252+
- `set.values()` -- même chose que pour `set.keys()`, méthode présente pour des raisons de compatibilité avec `Map`,
253+
- `set.entries()` -- retourne un objet iterable sous la forme de `[value, value]`, , méthode présente pour des raisons de compatibilité avec `Map`
238254
239255
## Summary
240256
241-
`Map` -- is a collection of keyed values.
257+
`Map` -- est une collection de clé valeurs.
242258
243-
Methods and properties:
259+
Méthodes et propriétés:
244260
245-
- `new Map([iterable])` -- creates the map, with optional `iterable` (e.g. array) of `[key,value]` pairs for initialization.
246-
- `map.set(key, value)` -- stores the value by the key.
247-
- `map.get(key)` -- returns the value by the key, `undefined` if `key` doesn't exist in map.
248-
- `map.has(key)` -- returns `true` if the `key` exists, `false` otherwise.
249-
- `map.delete(key)` -- removes the value by the key.
250-
- `map.clear()` -- removes everything from the map.
251-
- `map.size` -- returns the current element count.
261+
- `new Map([iterable])` -- créé une map, potentiellement initialisée avec un `iterable` (ex: un array) de couple clé valeur `[key, value]`.
262+
- `map.set(key, value)` -- définie la valeur `value` pour la clé `key`.
263+
- `map.get(key)` -- retourne la valeur associée à `key`, `undefined` si `key` n'existe pas.
264+
- `map.has(key)` -- retourne `true` si `key` existe sinon `false`.
265+
- `map.delete(key)` -- supprime la valeur associé à `key` dans la map.
266+
- `map.clear()` -- supprime tous les éléments dans la map.
267+
- `map.size` -- retourne le nombre d'éléments.
252268
253-
The differences from a regular `Object`:
269+
La différence entre `Map` avec un objet traditionel :
254270
255-
- Any keys, objects can be keys.
256-
- Additional convenient methods, the `size` property.
271+
- N'importe quel type peut être utilisé comme clé
272+
- Accès à des méthodes tels que `size`.
257273
258-
`Set` -- is a collection of unique values.
274+
`Set` -- est une collection de valeurs uniques
259275
260-
Methods and properties:
276+
Méthodes et propriétés :
261277
262-
- `new Set([iterable])` -- creates the set, with optional `iterable` (e.g. array) of values for initialization.
263-
- `set.add(value)` -- adds a value (does nothing if `value` exists), returns the set itself.
264-
- `set.delete(value)` -- removes the value, returns `true` if `value` existed at the moment of the call, otherwise `false`.
265-
- `set.has(value)` -- returns `true` if the value exists in the set, otherwise `false`.
266-
- `set.clear()` -- removes everything from the set.
267-
- `set.size` -- is the elements count.
278+
- `new Set([iterable])` -- créé un set, potentiellement initialisé avec un `iterable` (ex: un array) de valeurs.
279+
- `set.add(value)` -- ajoute une valeur sauf si elle existe et retourne le set en cours.
280+
- `set.delete(value)` -- supprime la valeur, retourne `true` si `value` existait au moment de l'appel sinon `false`.
281+
- `set.has(value)` -- retourne `true` si la valeur existe dans le `set`, sinon `false`.
282+
- `set.clear()` -- supprime tous les éléments du set.
283+
- `set.size` -- retourne le nombre d'éléments.
268284
269-
Iteration over `Map` and `Set` is always in the insertion order, so we can't say that these collections are unordered, but we can't reorder elements or directly get an element by its number.
285+
On ne peut pas dire que les éléments dans une `Map` ou un `Set` sont désordonnés car ils sont toujours parcourut par ordre d'insertion.
286+
Il est cependant impossible de réorganiser les éléments ou bien de les retrouver par leur index.

0 commit comments

Comments
 (0)