JS Core

Object.keys, values, entries

Научиться перебирать свойства объектов с помощью Object.keys(), Object.values() и Object.entries().

Начальный (Beginner)

Кратко

Object.keys() возвращает массив ключей. Object.values() — массив значений. Object.entries() — массив пар [ключ, значение]. Эти методы позволяют перебирать объекты так же удобно, как массивы.


Подробно

Объекты в JavaScript не имеют «индексов» как массивы. Но Object.keys/values/entries превращают их в массивы, которые можно перебирать.

Object.keys(obj) — массив ключей: const user = { name: 'Анна', age: 25 }; Object.keys(user); // ['name', 'age']

Object.values(obj) — массив значений: Object.values(user); // ['Анна', 25]

Object.entries(obj) — массив пар [ключ, значение]: Object.entries(user); // [['name', 'Анна'], ['age', 25]]

Эти методы возвращают массивы, поэтому с ними работают все методы массивов: Object.keys(user).forEach(key => console.log(key)); Object.entries(user).filter(([k, v]) => typeof v === 'string');

Применение:

  • Перебор свойств объекта
  • Фильтрация свойств
  • Преобразование объекта в массив
  • Проверка наличия свойства

Ментальная модель

Object.keys/values/entries — как ключ к шкафу: keys показывают названия ящиков, values — содержимое, entries — пары «название → содержимое».


Примеры

**Самый простой:**

javascript
const user = { name: 'Анна', age: 25, city: 'Москва' };

console.log(Object.keys(user));   // ['name', 'age', 'city']
console.log(Object.values(user)); // ['Анна', 25, 'Москва']

keys — ключи, values — значения. Оба возвращают массивы.

**Простой:**

javascript
const product = { name: 'Phone', price: 500, inStock: true };

const entries = Object.entries(product);
// [['name', 'Phone'], ['price', 500], ['inStock', true]]

entries.forEach(([key, value]) => {
  console.log(`${key}: ${value}`);
});

Object.entries + деструктуризация — удобный способ перебрать пары ключ/значение.

**Реальный пример:**

javascript
const scores = { Анна: 95, Пётр: 87, Мария: 92 };

// Найти лучший результат:
const topScorer = Object.entries(scores)
  .sort(([, a], [, b]) => b - a)[0];

console.log(`Лучший: ${topScorer[0]} (${topScorer[1]})`);
// Лучший: Анна (95)

Object.entries превращает объект в массив, который можно сортировать и обрабатывать.


Частые ошибки

**Неправильно:** Путать Object.keys и Object.values

**Почему:** keys — ключи (строки), values — значения (любой тип).

**Правильно:** Object.keys → ['name', 'age']. Object.values → ['Анна', 25].

**Неправильно:** Думать, что Object.entries возвращает объект

**Почему:** Object.entries возвращает массив массивов: [['key', 'value']].

**Правильно:** Object.entries → [['key', 'value']]. Для обратного преобразования — Object.fromEntries.

**Неправильно:** Забывать, что порядок свойств может отличаться

**Почему:** В объектах порядок свойств не гарантирован (хотя на практике обычно строковые ключи идут в порядке объявления).

**Правильно:** Не полагайтесь на порядок свойств объекта. Используйте массивы для упорядоченных данных.


Важно запомнить

  • Object.keys → массив ключей
  • Object.values → массив значений
  • Object.entries → массив [ключ, значение]
  • Возвращают массивы — работают с map/filter/forEach
  • Object.fromEntries — обратное преобразование

Связь

Назад: Вы знаете объекты (J11) и методы массивов (J14-16) — теперь вы можете их комбинировать.

Вперёд: Следующий урок (J18) — деструктуризация и spread/rest: мощный синтаксис для массивов и объектов.

Материалы курса JS Core — PROlab Academy.