You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/05-data-types/07-map-set/article.md
+28-28Lines changed: 28 additions & 28 deletions
Original file line number
Diff line number
Diff line change
@@ -15,12 +15,12 @@
15
15
Методы и свойства:
16
16
17
17
-`new Map()` -- создаёт коллекцию.
18
-
-[`map.set(key, value)`](mdn:js/Map/set) -- записывает по ключу `key` значение `value`.
19
-
-[`map.get(key)`](mdn:js/Map/get) -- возвращает значение по ключу или `undefined`, если ключ `key` отсутствует.
20
-
-[`map.has(key)`](mdn:js/Map/has) -- возвращает `true`, если ключ `key` присутствует в коллекции, иначе `false`.
21
-
-[`map.delete(key)`](mdn:js/Map/delete) -- удаляет элемент по ключу `key`.
22
-
-[`map.clear()`](mdn:js/Map/clear) -- очищает коллекцию от всех элементов.
23
-
-[`map.size`](mdn:js/Map/size) -- возвращает текущее количество элементов.
18
+
-`map.set(key, value)` -- записывает по ключу `key` значение `value`.
19
+
-`map.get(key)` -- возвращает значение по ключу или `undefined`, если ключ `key` отсутствует.
20
+
-`map.has(key)` -- возвращает `true`, если ключ `key` присутствует в коллекции, иначе `false`.
21
+
-`map.delete(key)` -- удаляет элемент по ключу `key`.
22
+
-`map.clear()` -- очищает коллекцию от всех элементов.
23
+
-`map.size` -- возвращает текущее количество элементов.
24
24
25
25
Например:
26
26
@@ -104,9 +104,9 @@ map.set("1", "str1")
104
104
105
105
Для перебора коллекции `Map` есть 3 метода:
106
106
107
-
- [`map.keys()`](mdn:js/Map/keys) -- возвращает итерируемый объект по ключам,
108
-
- [`map.values()`](mdn:js/Map/values) -- возвращает итерируемый объект по значениям,
109
-
- [`map.entries()`](mdn:js/Map/entries) -- возвращает итерируемый объект по парам вида `[ключ, значение]`, этот вариант используется по умолчанию в `for..of`.
107
+
- `map.keys()` -- возвращает итерируемый объект по ключам,
108
+
- `map.values()` -- возвращает итерируемый объект по значениям,
109
+
- `map.entries()` -- возвращает итерируемый объект по парам вида `[ключ, значение]`, этот вариант используется по умолчанию в `for..of`.
- `new Set(iterable)` -- создаёт `Set`, и если в качестве аргумента был предоставлен итерируемый объект (обычно это массив), то копирует его значения в новый `Set`.
240
-
- [`set.add(value)`](mdn:js/Set/add) -- добавляет значение (если оно уже есть, то ничего не делает), возвращает тот же объект `set`.
241
-
- [`set.delete(value)`](mdn:js/Set/delete) -- удаляет значение, возвращает `true`, если `value` было в множестве на момент вызова, иначе `false`.
242
-
- [`set.has(value)`](mdn:js/Set/has) -- возвращает `true`, если значение присутствует в множестве, иначе `false`.
243
-
- [`set.clear()`](mdn:js/Set/clear) -- удаляет все имеющиеся значения.
244
-
- [`set.size`](mdn:js/Set/size) -- возвращает количество элементов в множестве.
240
+
- `set.add(value)` -- добавляет значение (если оно уже есть, то ничего не делает), возвращает тот же объект `set`.
241
+
- `set.delete(value)` -- удаляет значение, возвращает `true`, если `value` было в множестве на момент вызова, иначе `false`.
242
+
- `set.has(value)` -- возвращает `true`, если значение присутствует в множестве, иначе `false`.
243
+
- `set.clear()` -- удаляет все имеющиеся значения.
244
+
- `set.size` -- возвращает количество элементов в множестве.
245
245
246
246
Основная "изюминка" - это то, что при повторных вызовах `set.add()` с одним и тем же значением ничего не происходит, за счёт этого как раз и получается, что каждое значение появляется один раз.
- [`set.keys()`](mdn:js/Set/keys) -- возвращает перебираемый объект для значений,
298
-
- [`set.values()`](mdn:js/Set/values) -- то же самое, что и `set.keys()`, присутствует для обратной совместимости с `Map`,
299
-
- [`set.entries()`](mdn:js/Set/entries) -- возвращает перебираемый объект для пар вида `[значение, значение]`, присутствует для обратной совместимости с `Map`.
297
+
- `set.values()` -- возвращает перебираемый объект для значений,
298
+
- `set.keys()` -- то же самое, что и `set.values()`, присутствует для обратной совместимости с `Map`,
299
+
- `set.entries()` -- возвращает перебираемый объект для пар вида `[значение, значение]`, присутствует для обратной совместимости с `Map`.
- `new Set([iterable])` -- создаёт `Set`, можно указать перебираемый объект со значениями для инициализации.
325
-
- [`set.add(value)`](mdn:js/Set/add) -- добавляет значение (если оно уже есть, то ничего не делает), возвращает тот же объект `set`.
326
-
- [`set.delete(value)`](mdn:js/Set/delete) -- удаляет значение, возвращает `true` если `value` было в множестве на момент вызова, иначе `false`.
327
-
- [`set.has(value)`](mdn:js/Set/has) -- возвращает `true`, если значение присутствует в множестве, иначе `false`.
328
-
- [`set.clear()`](mdn:js/Set/clear) -- удаляет все имеющиеся значения.
329
-
- [`set.size`](mdn:js/Set/size) -- возвращает количество элементов в множестве.
325
+
- `set.add(value)` -- добавляет значение (если оно уже есть, то ничего не делает), возвращает тот же объект `set`.
326
+
- `set.delete(value)` -- удаляет значение, возвращает `true` если `value` было в множестве на момент вызова, иначе `false`.
327
+
- `set.has(value)` -- возвращает `true`, если значение присутствует в множестве, иначе `false`.
328
+
- `set.clear()` -- удаляет все имеющиеся значения.
329
+
- `set.size` -- возвращает количество элементов в множестве.
330
330
331
331
Перебор `Map` и `Set` всегда осуществляется в порядке добавления элементов, так что нельзя сказать, что это -- неупорядоченные коллекции, но поменять порядок элементов или получить элемент напрямую по его номеру нельзя.
Copy file name to clipboardExpand all lines: 1-js/06-advanced-functions/01-recursion/01-sum-to/solution.md
+1-2Lines changed: 1 addition & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -1,4 +1,3 @@
1
-
2
1
Решение с помощью цикла:
3
2
4
3
```js run
@@ -38,4 +37,4 @@ P.S. Надо ли говорить, что решение по формуле
38
37
39
38
Вариант с циклом – второй по скорости. Он быстрее рекурсии, так как операций сложения столько же, но нет дополнительных вычислительных затрат на организацию вложенных вызовов. Поэтому рекурсия в данном случае работает медленнее всех.
40
39
41
-
P.P.S. Некоторые движки поддерживают оптимизацию "хвостового вызова": если рекурсивный вызов является самым последним в функции, без каких-либо других вычислений, то внешней функции не нужно будет возобновлять выполнение и не нужно запоминать контекст его выполнения. В итоге требования к памяти снижаются. Но если JavaScript-движок не поддерживает это (большинство не поддерживают), будет ошибка: максимальный размер стека превышен, так как обычно существует ограничение на максимальный размер стека.
40
+
P.P.S. Некоторые движки поддерживают оптимизацию "хвостового вызова": если рекурсивный вызов является самым последним в функции (`sumTo` выше не будет оптимизирован, т.к. последним происходит сложение, а не рекурсивный вызов), то внешней функции не нужно будет возобновлять выполнение и не нужно запоминать контекст его выполнения. В итоге требования к памяти снижаются, и сумма `sumTo(100000)` будет успешно вычислена. Но если JavaScript-движок не поддерживает это (большинство не поддерживают), будет ошибка: максимальный размер стека превышен, так как обычно существует ограничение на максимальный размер стека.
Copy file name to clipboardExpand all lines: 1-js/06-advanced-functions/01-recursion/article.md
+2-4Lines changed: 2 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -1,4 +1,3 @@
1
-
2
1
# Рекурсия и стек
3
2
4
3
Вернёмся к функциям и изучим их более подробно.
@@ -62,7 +61,7 @@ pow(2, 4) = 16
62
61
if n==1 = x
63
62
/
64
63
pow(x, n) =
65
-
\
64
+
\
66
65
else = x * pow(x, n - 1)
67
66
```
68
67
@@ -516,7 +515,6 @@ list.next = list.next.next;
516
515
## Итого
517
516
518
517
Термины:
519
-
520
518
-*Рекурсия*- это термин в программировании, означающий вызов функцией самой себя. Рекурсивные функции могут быть использованы для элегантного решения определённых задач.
521
519
522
520
Когда функция вызывает саму себя, это называется *шагом рекурсии*. *База* рекурсии - это такие аргументы функции, которые делают задачу настолько простой, что решение не требует дальнейших вложенных вызовов.
@@ -529,7 +527,7 @@ list.next = list.next.next;
529
527
list = { value, next -> list }
530
528
```
531
529
532
-
Деревья, такие как дерево HTML-элементов или дерево отделов из этой главы, также являются рекурсивными:у них есть ветви, и каждая ветвь может содержать другие ветви.
530
+
Деревья, такие как дерево HTML-элементов или дерево отделов из этой главы, также являются рекурсивными:они разветвляются, и каждая ветвь может содержать другие ветви.
533
531
534
532
Как мы видели в примере `sumSalary`, рекурсивные функции могут быть использованы для прохода по ним.
0 commit comments