JavaScript
  • 🧑‍💻Full-Stack Web Developer
  • 📚Теорія
    • 1️⃣Змінні і типи
      • Знайомство з JavaScript
      • Інструменти розробника
      • Підключення скрипту
      • Основи синтаксису
      • Змінні і типи
      • Взаємодія з користувачем
      • Основні оператори
      • Числа
      • Рядки
      • Логічні операції
    • 2️⃣Розгалудження і цикли
      • Розгалуження
      • Тернарний оператор
      • Інструкція switch
      • Область видимості
      • Цикли
    • 3️⃣Масиви
      • Масиви
      • Ітерація по масиву
      • Присвоєння за посиланням і значенням
      • Методи масиву
    • 4️⃣Функції
      • Функції
      • Стек викликів
    • 5️⃣Обʼєкти
      • Обʼєкти
      • Перебирання обʼєкта
      • Масив обʼєктів
      • Операції spread і rest
      • Деструктуризація обʼєктів
      • Деструктуризація масивів
      • Паттерн "обʼєкт параметрів"
    • 6️⃣Колбек-функції, стрілкові функції, перебір масиву
      • Колбек-функції
      • Метод forEach
      • Стрілкові функції
      • Підходи до написання коду
      • Чисті функції
    • 7️⃣Перебираючі методи масивів
      • Перебираючі методи масиву
      • Метод map()
      • Метод flatMap()
      • Метод filter()
      • Метод find()
      • Метод findIndex()
      • Методи every() і some()
      • Метод reduce()
      • Метод sort()
      • Ланцюжки методів
    • 8️⃣Контекст, прототипи та класи
      • Контекст виконання функції
      • Правила визначення this
      • Методи функцій
      • Об'єктно-орієнтоване програмування
      • Прототипне наслідування
    • Класи
  • 👷Практика
    • 👷Практика
    • Page 1
  • Про мене
    • Про мене
Powered by GitBook
On this page
  • Цикл for...in
  • Метод Object.create()
  • Метод hasOwnProperty()
  • Метод Object.keys()​
  • Метод Object.values()
  • Метод Object.entries()
  1. Теорія
  2. Обʼєкти

Перебирання обʼєкта

PreviousОбʼєктиNextМасив обʼєктів

Last updated 1 year ago

Об'єкт - це неітерабельна сутність і його не можна перебрати циклами for або for...of. Для перебору обʼєктів використовують інші підходи.

Цикл for...in

Цикл for...in використовують для перебору ключів об'єкта. Цей цикл дозволяє пройтися по всіх перераховуваних властивостях об'єкта, включаючи його власні властивості та властивості, які знаходяться в ланцюжку прототипів.

for (key in object) {
  // інструкції
}

На кожній ітерації цього циклу береться ключ однієї властивості. Утім знаючи ключ використовуючи синтаксис квадратних дужок можна отримати і значення властивості.

let user = {
  name: "Alex",
  age: 30,
  hobby: ["electronics", "programming", "gym"],
};

for (let key in user) {
  console.log(key); // На кожній ітерації виведе: name, age, hobby
  console.log(user[key]); // На кожній ітерації виведе: "Alex", 30, ["electronics", "programming", "gym"]
}

Метод Object.create()

Метод Object.create() використовують для створення нового об'єкта з вказаним прототипом та властивостями.

Припустимо у нас є обʼєкт car, в якому описана властивість кількості коліс - 4. На його основі ми можемо створити новий обʼєкт myCar, який у прототипі успадкує властивості обʼєкту car.

В наступному прикладі обʼєкт myCar - має властивість model. Але якщо звернутися до його властивості wheels - нам покаже 4. Це відбувається тому, що не знайшовши власну таку властивість JavaScript шукатиме таку властивість у прототипі обʼєкта і якщо знайде, то поверне це значення. якщо не знайде, то шукатиме у прототипі прототипа і так далі. Якщо і в прототипах не знайде такої властивості, то поверне undefined.

const car = {
  wheels: 4,
};

const myCar = Object.create(car);
myCar.model = "Audi";

console.log("car", car);
console.log("myCar", myCar);
console.log("myCar.wheels", myCar.wheels);

Як бачимо, обʼєкт може мати власні властивості, а може мати властивості прототипа.

Якщо потрібно створити об'єкт без додаткових властивостей прототипа. Це може бути корисним в деяких випадках, коли необхідно створити об'єкт без будь-яких унаслідованих властивостей:

let emptyObject = Object.create(null);

Метод hasOwnProperty()

Давайте вищезазначений обʼєкт myCar спробуємо перебрати циклом for...in.

const car = {
  wheels: 4,
};

const myCar = Object.create(car);
myCar.model = "Audi";

for (let key in myCar) {
  console.log(key); // На кожній ітерації виведе: model, wheels
  console.log(myCar[key]); // На кожній ітерації виведе: "Audi", 4
}

Як бачимо цикл for...in перебирає як власні властивості, так і властивості свого прототипу і не бачить між ними різниці. Але у більшості випадків потрібно перебирати саме власні вдастивості обʼєкта.

Щоб дізнатись, чи містить об'єкт власну властивість, використовують метод hasOwnProperty(key), який повертає true або false.

const car = {
  wheels: 4,
};

const myCar = Object.create(car);
myCar.model = "Audi";

console.log("Has own property model: ", myCar.hasOwnProperty("model")); //true
console.log("Has own property wheels: ", myCar.hasOwnProperty("wheels")); //false

Використовуючи цей метод, щоб вибрати тільки власні властивості обʼєкта - на кожній ітерації потрібно проводити перевірку чи це є власною властивістю.

const car = {
  wheels: 4,
};

const myCar = Object.create(car);
myCar.model = "Audi";

for (let key in myCar) {
  if (myCar.hasOwnProperty(key)) {
    console.log(key); // На ітерації виведе: model
    console.log(myCar[key]); // На ітерації виведе: "Audi"
  }
}

Метод Object.keys() використовують для отримання масиву зі всіма власними перераховуваними властивостями об'єкта, які мають строкові ключі. Цей метод повертає масив із ключами властивостей об'єкта, які можна перерахувати. Якщо власних властивостей нема - повернеться порожній масив.

const car = {
  wheels: 4,
};

const myCar = Object.create(car);
myCar.model = "Audi";
myCar.color = "red";

console.log(Object.keys(myCar)); // ['model', 'color']

Отримавши масив ключів власних властивостей, тепер можна перебрати обʼєкт використовуючи цикл for...of не роблячи перевірку чи це власна властивість на кожній ітерації.

const car = {
  wheels: 4,
};

const myCar = Object.create(car);
myCar.model = "Audi";
myCar.color = "red";

const keys = Object.keys(myCar);
console.log(keys);

for (const key of keys) {
  console.log(key);
  console.log(myCar[key]);
}

Метод Object.values()

Метод Object.values() використовують для отримання масиву зі всіма значеннями перераховуваних вдасних властивостей об'єкта. Якщо вдастивостей немає, то повернеться порожній массив.

const car = {
  wheels: 4,
};

const myCar = Object.create(car);
myCar.model = "Audi";
myCar.color = "red";

const values = Object.values(myCar);
console.log(values); // ['Audi', 'red']

Масив значень властивостей також можна перебрати циклом for...of, наприклад, для отримання загальної суми числових значень.

const cars = {
  audi: 3,
  ford: 5,
  bmw: 2,
  toyota: 6,
};

const values = Object.values(cars); //[3, 5, 2, 6]

let total = 0;

for (let value of values) {
  total += value;
}

console.log("total: ", total); // total: 16

Метод Object.entries()

Метод Object.entries() використовують для отримання масиву зі всіма записами (парами ключ-значення) перераховуваних властивостей об'єкта. Цей метод повертає масив, в якому кожен елемент сам є масивом, що містить ключ та відповідне йому значення.

const car = {
  wheels: 4,
};

const myCar = Object.create(car);
myCar.model = "Audi";
myCar.color = "red";

const result = Object.entries(myCar);
console.log(result); // [['model', 'Audi'], ['color', 'red']]

На практиці метод Object.entries() використовують рідко, тільки для якихось дуже специфічних завдань.

Метод Object.keys()

📚
5️⃣
​