Содержание
В этом посте мы рассмотрим как в JS перебрать объект с помощью цикла и методов. Методы перебора массива мы рассматривали в этой статье.
Мы рассмотрим следующие варианты:
- for in — цикл по объекту. Можно получить и ключ и значение.
- Object.entries() — метод, возвращающий массив пар
[key, value]
- Object.keys() — метод, который возвращает массив ключей
[key1, key2]
- Object.values() — метод, который возвращает массив значений
[value1, value2]
For … in
Начнем с простого примера, допустим у нас есть объект user
const user = { name: 'John', age: 30, position: 'manager', salary: 5000 }
Если мы знаем все свойства этого объекта, то мы могли бы их просто вывести так:
console.log(user.name); console.log(user.age); // и т.д.
Но что, если мы не знаем сколько у него сейчас свойств и какие свойства есть, а нам нужно их все отобразить. В данном случае нам и понадобиться цикл для прохода по этому объекту
for (let key in user) { console.log(key + ' - ' + user[key]); } // В консоли мы увидим следующее: // name - John // age - 30 // position - manager // salary - 5000
В переменную key
мы получаем на каждой итерации ключ, а для того чтобы получить значение по данному ключу, мы используем user[key]
.
Обратите внимание, что мы не можем написать просто user.key
, т.к. у нашего объекта нет такого свойства, key
— это переменная, которую мы задали для прохода по объекту в цикле (кстати, мы также можем сделать ее const
вместо let
, это не имеет значения). Поэтому мы обращаемся именно через квадратные скобки []
В другом примере, рассмотрим вариант когда нам те же данные нужно вывести и добавить к определeнному div
<div id="user-profile"></div> <script> const user = { name: 'John', age: 30, position: 'manager', salary: 5000 } let userData = document.createElement('ul'); for (const key in user) { userData.innerHTML += `<li>${key} - ${user[key]}</li>`; } const parentDiv = document.getElementById('user-profile'); parentDiv.appendChild(userData); </script>
Еще пару моментов, которые касаются этого цикла. Первое, сортировка ключей происходит в порядке их добавления, если ключи это обычные строки. Если ключи это числа (не важно 9 или «9»), тогда они будут выводиться в порядке возрастания. Допустим, есть объект с постами, где ключ это id поста:
const posts = { 2: 'Второй пост', 3: 'Третий пост', 1: 'Первый пост' } console.log(posts); // {1: 'Первый пост', 2: 'Второй пост', 3: 'Третий пост'}
Так часто приходится делать в случае, когда вам нужно будет вытащить пост по ID, это будет быстрее чем перебирать весь массив постов.
Второй нюанс, это то что данный цикл перебирает все свойства в цепочке Prototype:
const user = { name: 'John', age: 30 } const user1 = { lastName: 'Doe', role: 'admin' } user1.__proto__ = user; for (let key in user1) { console.log(key); } // Результат в консоли // lasName, role, name, age
Для того, чтобы вывести только свойства конкретного объекта, вам придется воспользоваться методом hasOwnProperty
(более детально об этом методе), чтобы убедиться что данное свойство принадлежит только итерируемому объекту:
for (let key in user1) { if (user1.hasOwnProperty(key)) { console.log(key); } } // lastName, role
Object.entries() — пара ключ значение из объекта
Данный метод вернет массив, где каждый элемент массива будет парой [ключ, значение]
const user = { name: 'John', age: 30, role: 'Administrator' } const objEntries = Object.entries(user); console.log(objEntries); // [ ['name', 'John'], ['age', 30], ['role', 'Administrator'] ]
Важно, обратите внимание на вызов данного метода. Нельзя просто написать user.entries()
Из нашего примера видно, что в переменной objEntries
будет массив состоящий из 3 других массивов. Дальше в зависимости от того, что вам нужно в результате, вы можете воспользоваться методами массивов.
Object.keys() — получаем ключи из объекта
Данный метод возвращает массив ключей объекта. Если рассмотреть на том же примере с объектом user, то получим:
const objKeys = Object.keys(user); console.log(objKeys); // [ 'name', 'age', 'role' ]
Данный метод можно использовать для определения количества элементов в объекте:
console.log(Object.keys(user).length); // 3
Это упрощенная версия, более детально как проверить количество элементов в объекте или проверить объект на пустоту можете ознакомиться по ссылке.
Object.values() — получаем массив значений из объекта
Как вы уже наверное догадались, данный метод возвращает массив со значениями:
const user = { name: 'John', age: 30, role: 'Administrator' } const objValues = Object.values(user); console.log(objValues); // [ 'John', 30, 'Administrator' ]
Тут думаю ничего сложного, но если остались вопросы пишите в комментариях.
Добавить комментарий