Skip to content

Commit 520f08a

Browse files
committed
fixes
1 parent df92326 commit 520f08a

6 files changed

Lines changed: 173 additions & 166 deletions

File tree

1-js/05-data-types/07-map-set/article.md

Lines changed: 86 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
```js run
2828
let map = new Map();
2929

30-
map.set("1", "str1"); //строка в качестве ключа
31-
map.set(1, "num1"); //цифра как ключ
32-
map.set(true, "bool1"); //булево значение как ключ
30+
map.set("1", "str1"); // строка в качестве ключа
31+
map.set(1, "num1"); // цифра как ключ
32+
map.set(true, "bool1"); // булево значение как ключ
3333

3434
// помните, обычный объект Object приводит ключи к строкам?
3535
// Map сохраняет тип ключей, так что в этом случае сохранится 2 разных значения:
@@ -92,36 +92,6 @@ map.set("1", "str1")
9292
```
9393
````
9494
95-
## Создание Map из Object
96-
97-
При создании `Map` мы можем указать массив (или другой итерируемый объект) с парами ключ-значение для инициализации, как здесь:
98-
99-
```js
100-
// массив пар [ключ, значение]
101-
let map = new Map([
102-
["1", "str1"],
103-
[1, "num1"],
104-
[true, "bool1"]
105-
]);
106-
```
107-
108-
Если у нас уже есть обычный объект, и мы хотели бы создать `Map` из него, то поможет встроенный метод [Object.entries(obj)](mdn:js/Object/entries), который получает объект и возвращает массив пар ключ-значение для него, как раз в этом формате.
109-
110-
Так что мы можем создать `Map` из обычного объекта следующим образом:
111-
112-
```js
113-
let obj = {
114-
name: "John",
115-
age: 30
116-
};
117-
118-
*!*
119-
let map = new Map(Object.entries(obj));
120-
*/!*
121-
```
122-
123-
Здесь `Object.entries` возвращает массив пар ключ-значение: `[ ["name","John"], ["age", 30] ]`. Это именно то, что нужно для создания `Map`.
124-
12595
## Перебор Map
12696
12797
Для перебора коллекциии `Map` есть 3 метода:
@@ -168,6 +138,89 @@ recipeMap.forEach((value, key, map) => {
168138
});
169139
```
170140
141+
## Object.entries: Map из Object
142+
143+
При создании `Map` мы можем указать массив (или другой итерируемый объект) с парами ключ-значение для инициализации, как здесь:
144+
145+
```js run
146+
// массив пар [ключ, значение]
147+
let map = new Map([
148+
['1', 'str1'],
149+
[1, 'num1'],
150+
[true, 'bool1']
151+
]);
152+
153+
alert( map.get('1') ); // str1
154+
```
155+
156+
Если у нас уже есть обычный объект, и мы хотели бы создать `Map` из него, то поможет встроенный метод [Object.entries(obj)](mdn:js/Object/entries), который получает объект и возвращает массив пар ключ-значение для него, как раз в этом формате.
157+
158+
Так что мы можем создать `Map` из обычного объекта следующим образом:
159+
160+
```js
161+
let obj = {
162+
name: "John",
163+
age: 30
164+
};
165+
166+
*!*
167+
let map = new Map(Object.entries(obj));
168+
*/!*
169+
```
170+
171+
Здесь `Object.entries` возвращает массив пар ключ-значение: `[ ["name","John"], ["age", 30] ]`. Это именно то, что нужно для создания `Map`.
172+
173+
174+
## Object.fromEntries: Object из Map
175+
176+
Мы только что видели, как создать `Map` из обычного объекта при помощи `Object.entries(obj)`.
177+
178+
Есть метод `Object.fromEntries`, который делает противоположное: получив массив пар вида `[ключ, значение]`, он создаёт из них объект:
179+
180+
```js run
181+
let prices = Object.fromEntries([
182+
['banana', 1],
183+
['orange', 2],
184+
['meat', 4]
185+
]);
186+
187+
// now prices = { banana: 1, orange: 2, meat: 4 }
188+
189+
alert(prices.orange); // 2
190+
```
191+
192+
Мы можем использовать `Object.fromEntries`, чтобы получить обычный объект из `Map`.
193+
194+
К примеру, у нас данные в `Map`, но их нужно передать в сторонний код, который ожидает обычный объект.
195+
196+
Вот как это сделать:
197+
198+
```js run
199+
let map = new Map();
200+
map.set('banana', 1);
201+
map.set('orange', 2);
202+
map.set('meat', 4);
203+
204+
*!*
205+
let obj = Object.fromEntries(map.entries()); // make a plain object (*)
206+
*/!*
207+
208+
// готово!
209+
// obj = { banana: 1, orange: 2, meat: 4 }
210+
211+
alert(obj.orange); // 2
212+
```
213+
214+
Вызов `map.entries()` возвращает массив пар ключ/значение, как раз в нужном формате для `Object.fromEntries`.
215+
216+
Мы могли бы написать строку `(*)` ещё короче:
217+
218+
```js
219+
let obj = Object.fromEntries(map); // убрать .entries()
220+
```
221+
222+
Это то же самое, так как `Object.fromEntries` ожидает перебираемый объект в качестве аргумента, не обязательно массив. А перебор `map` как раз возвращает пары ключ/значение, так же, как и `map.entries()`. Так что в итоге у будет обычный объект с теми же ключами/значениями, что и в `map`.
223+
171224
## Set
172225
173226
Объект `Set` -- это особый вид коллекции: "множество" значений (без ключей), где каждое значение может появляться только один раз.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 5
44

55
# Хранение отметок "не прочитано"
66

7-
У нас есть массив сообщений:
7+
Есть массив сообщений:
88

99
```js
1010
let messages = [

0 commit comments

Comments
 (0)