diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ee7095b..e302bf4 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -38,3 +38,4 @@ - [Объекты](js/objects.md) - [Изменяемость объектов](js/objects_mutability.md) - [Динамический доступ к свойствам объекта](js/dynamic_property_access.md) + - [Итерация по свойствам объекта](js/iterating_over_object_properties.md) diff --git a/src/js/iterating_over_object_properties.md b/src/js/iterating_over_object_properties.md new file mode 100644 index 0000000..ae5ca1b --- /dev/null +++ b/src/js/iterating_over_object_properties.md @@ -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 + ```