Skip to content

Commit

Permalink
New chapter: Iterating over Object Properties
Browse files Browse the repository at this point in the history
  • Loading branch information
jvstme committed Jan 8, 2024
1 parent 1acb754 commit ee4db04
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,4 @@
- [Объекты](js/objects.md)
- [Изменяемость объектов](js/objects_mutability.md)
- [Динамический доступ к свойствам объекта](js/dynamic_property_access.md)
- [Итерация по свойствам объекта](js/iterating_over_object_properties.md)
78 changes: 78 additions & 0 deletions src/js/iterating_over_object_properties.md
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
```

0 comments on commit ee4db04

Please sign in to comment.