Перебирання обʼєкта
Last updated
Last updated
Об'єкт - це неітерабельна сутність і його не можна перебрати циклами for або for...of. Для перебору обʼєктів використовують інші підходи.
Цикл for...in використовують для перебору ключів об'єкта. Цей цикл дозволяє пройтися по всіх перераховуваних властивостях об'єкта, включаючи його власні властивості та властивості, які знаходяться в ланцюжку прототипів.
На кожній ітерації цього циклу береться ключ однієї властивості. Утім знаючи ключ використовуючи синтаксис квадратних дужок можна отримати і значення властивості.
Метод Object.create() використовують для створення нового об'єкта з вказаним прототипом та властивостями.
Припустимо у нас є обʼєкт car, в якому описана властивість кількості коліс - 4. На його основі ми можемо створити новий обʼєкт myCar, який у прототипі успадкує властивості обʼєкту car.
В наступному прикладі обʼєкт myCar - має властивість model. Але якщо звернутися до його властивості wheels - нам покаже 4. Це відбувається тому, що не знайшовши власну таку властивість JavaScript шукатиме таку властивість у прототипі обʼєкта і якщо знайде, то поверне це значення. якщо не знайде, то шукатиме у прототипі прототипа і так далі. Якщо і в прототипах не знайде такої властивості, то поверне undefined.
Як бачимо, обʼєкт може мати власні властивості, а може мати властивості прототипа.
Якщо потрібно створити об'єкт без додаткових властивостей прототипа. Це може бути корисним в деяких випадках, коли необхідно створити об'єкт без будь-яких унаслідованих властивостей:
Давайте вищезазначений обʼєкт myCar спробуємо перебрати циклом for...in.
Як бачимо цикл for...in перебирає як власні властивості, так і властивості свого прототипу і не бачить між ними різниці. Але у більшості випадків потрібно перебирати саме власні вдастивості обʼєкта.
Щоб дізнатись, чи містить об'єкт власну властивість, використовують метод hasOwnProperty(key), який повертає true або false.
Використовуючи цей метод, щоб вибрати тільки власні властивості обʼєкта - на кожній ітерації потрібно проводити перевірку чи це є власною властивістю.
Метод Object.keys() використовують для отримання масиву зі всіма власними перераховуваними властивостями об'єкта, які мають строкові ключі. Цей метод повертає масив із ключами властивостей об'єкта, які можна перерахувати. Якщо власних властивостей нема - повернеться порожній масив.
Отримавши масив ключів власних властивостей, тепер можна перебрати обʼєкт використовуючи цикл for...of не роблячи перевірку чи це власна властивість на кожній ітерації.
Метод Object.values() використовують для отримання масиву зі всіма значеннями перераховуваних вдасних властивостей об'єкта. Якщо вдастивостей немає, то повернеться порожній массив.
Масив значень властивостей також можна перебрати циклом for...of, наприклад, для отримання загальної суми числових значень.
Метод Object.entries() використовують для отримання масиву зі всіма записами (парами ключ-значення) перераховуваних властивостей об'єкта. Цей метод повертає масив, в якому кожен елемент сам є масивом, що містить ключ та відповідне йому значення.
На практиці метод Object.entries() використовують рідко, тільки для якихось дуже специфічних завдань.