-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New chapter: Iterating over Object Properties
- Loading branch information
Showing
2 changed files
with
79 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
# Итерация по свойствам объекта | ||
|
||
Если заранее список свойств объекта не известен, то может потребовать получить его в процессе выполнения программы, например чтобы запустить цикл по всем свойствам. Для этого пригодятся функции `Object.keys`, `Object.values` и `Object.entries`. | ||
|
||
Функция `Object.keys` принимает объект и возвращает массив строк — названий свойств этого объекта, также известных как "ключи". | ||
|
||
```js | ||
Object.keys({ a: 0, b: 2 }); // Возвращает: ["a", "b"] | ||
``` | ||
|
||
Функция `Object.values` принимает объект и возвращает массив значений свойств этого объекта. | ||
|
||
```js | ||
Object.values({ a: 0, b: 2 }); // Возвращает: [0, 2] | ||
``` | ||
|
||
Функция `Object.entries` принимает объект и возвращает массив пар, в котором каждая пара — массив из двух элементов: названия свойства и его значения. | ||
|
||
```js | ||
Object.entries({ a: 0, b: 2 }); // Возвращает: [["a", 0], ["b", 2]] | ||
``` | ||
|
||
Стоит отметить, что в возвращаемых этими функциями массивах ключи и значения могут располагаться не в том порядке, в котором были указаны в объекте изначально. | ||
|
||
#### Пример задачи | ||
|
||
Предположим, что дан объект слов и их переводов, которые пользователь вводит вручную. | ||
|
||
```js | ||
const dictionary = {}; | ||
|
||
while (true) { | ||
const word = prompt("Введите слово"); | ||
|
||
if (!word) { | ||
break; | ||
} | ||
|
||
const translation = prompt("Введите перевод"); | ||
|
||
if (!translation) { | ||
break; | ||
} | ||
|
||
dictionary[word] = translation; | ||
} | ||
``` | ||
|
||
Чтобы отобразить все слова и переводы пользователю, соберём их в строку, в которой каждое слово и перевод будут разделены знаком `-`. Для этого понадобится цикл по всем словам, поэтому воспользуемся функцией `Object.keys`. | ||
|
||
```js | ||
let result = ""; | ||
const words = Object.keys(dictionary); | ||
|
||
for (let i = 0; i < words.length; i++) { | ||
const word = words[i]; | ||
const translation = dictionary[word]; | ||
result += word + " - " + translation + "\n"; | ||
} | ||
|
||
alert(result); | ||
``` | ||
|
||
## Упражнения | ||
|
||
1. Учёный-лингвист хочет определить, какие буквы английского языка используются больше всего. Напиши программу, которая принимает на вход произвольный текст и выводит, сколько раз в нём встречается каждая буква английского алфавита. Список букв должен быть отсортирован по убыванию числа вхождений в текст. Если какая-то буква не встречается в тексте, то её выводить не нужно. | ||
|
||
Пример ввода: | ||
|
||
``` | ||
All human beings are born free and equal in dignity and rights. They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood. | ||
``` | ||
Пример вывода: | ||
``` | ||
N: 16, E: 15, A: 14, O: 12, R: 11, I: 10, D: 10, T: 9, H: 8, S: 7, L: 4, C: 4, U: 3, B: 3, G: 3, W: 3, F: 2, Y: 2, M: 1, Q: 1, P: 1 | ||
``` |