Object.keys, Object.values, Object.entries в JavaScript

21 июля 2026
Автор

Антон Ларичев

Работа с ключами и значениями объекта

JavaScript предоставляет три статических метода объекта Object, которые стали стандартным способом итерации по объектам и их преобразования: Object.keys(), Object.values() и Object.entries(). Методы появились в ES2017 и позволяют работать с объектами так же удобно, как с массивами — используя map, filter, reduce и другие функции высшего порядка.

Курс по теме

Курс JavaScript с нуля

40 000+ студентов · рейтинг 4.8 · гарантия возврата 30 дней

Object.keys()

Object.keys() возвращает массив строк, содержащий все перечисляемые собственные ключи объекта в порядке их добавления.

Синтаксис

Object.keys(obj)

Базовый пример

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

console.log(Object.keys(user)); // ['name', 'age', 'city']

Итерация по ключам

const config = {
  host: 'localhost',
  port: 3000,
  debug: true
};

Object.keys(config).forEach(key => {
  console.log(`${key}: ${config[key]}`);
});
// host: localhost
// port: 3000
// debug: true

Подсчёт количества свойств

Простой способ узнать количество полей объекта без ручного перебора:

const product = {
  id: 1,
  name: 'Ноутбук',
  price: 75000,
  inStock: true
};

console.log(Object.keys(product).length); // 4

Проверка наличия свойства

const settings = {
  theme: 'dark',
  language: 'ru'
};

console.log(Object.keys(settings).includes('theme')); // true
console.log(Object.keys(settings).includes('font'));  // false

Object.values()

Object.values() возвращает массив значений всех перечисляемых собственных свойств объекта — в том же порядке, что и Object.keys().

Синтаксис

Object.values(obj)

Базовый пример

const prices = {
  apple: 50,
  banana: 30,
  cherry: 120
};

console.log(Object.values(prices)); // [50, 30, 120]

Вычисление суммы значений

const cart = {
  laptop: 75000,
  mouse: 2500,
  keyboard: 5000
};

const total = Object.values(cart).reduce((sum, price) => sum + price, 0);
console.log(total); // 82500

Поиск максимального значения

const scores = {
  alice: 95,
  bob: 87,
  charlie: 92
};

const maxScore = Math.max(...Object.values(scores));
console.log(maxScore); // 95

Проверка, что все значения соответствуют условию

const formFields = {
  username: 'john_doe',
  email: 'john@example.com',
  password: 'secret123'
};

const allFilled = Object.values(formFields).every(value => value.trim() !== '');
console.log(allFilled); // true

Object.entries()

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

Синтаксис

Object.entries(obj)

Базовый пример

const person = {
  name: 'Мария',
  age: 25,
  role: 'developer'
};

console.log(Object.entries(person));
// [['name', 'Мария'], ['age', 25], ['role', 'developer']]

Деструктуризация в цикле

Самый читаемый способ итерации по объекту с доступом и к ключу, и к значению:

const config = {
  apiUrl: 'https://api.example.com',
  timeout: 5000,
  retries: 3
};

for (const [key, value] of Object.entries(config)) {
  console.log(`${key} = ${value}`);
}
// apiUrl = https://api.example.com
// timeout = 5000
// retries = 3

Трансформация объекта через map

Сочетание Object.entries() и Object.fromEntries() позволяет трансформировать объект функционально, не мутируя исходный:

const prices = {
  apple: 50,
  banana: 30,
  cherry: 120
};

// Увеличить все цены на 10%
const updatedPrices = Object.fromEntries(
  Object.entries(prices).map(([key, value]) => [key, value * 1.1])
);

console.log(updatedPrices);
// { apple: 55, banana: 33, cherry: 132 }

Фильтрация свойств объекта

const user = {
  name: 'Дмитрий',
  age: 28,
  password: 'secret123',
  email: 'dmitry@example.com',
  token: 'abc123'
};

const sensitiveFields = ['password', 'token'];

const safeUser = Object.fromEntries(
  Object.entries(user).filter(([key]) => !sensitiveFields.includes(key))
);

console.log(safeUser);
// { name: 'Дмитрий', age: 28, email: 'dmitry@example.com' }

Object.fromEntries()

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

const entries = [['a', 1], ['b', 2], ['c', 3]];
const obj = Object.fromEntries(entries);
console.log(obj); // { a: 1, b: 2, c: 3 }

Конвертация Map в объект

const map = new Map([
  ['name', 'Елена'],
  ['age', 32],
  ['city', 'Санкт-Петербург']
]);

const obj = Object.fromEntries(map);
console.log(obj);
// { name: 'Елена', age: 32, city: 'Санкт-Петербург' }

Практические сценарии

Нормализация ответа API

Нередко API возвращает объекты с ключами в стиле snake_case, а во фронтенде принят camelCase:

const apiResponse = {
  user_name: 'ivan_petrov',
  user_age: 35,
  user_email: 'ivan@example.com'
};

const toCamelCase = str =>
  str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());

const normalized = Object.fromEntries(
  Object.entries(apiResponse).map(([key, value]) => [toCamelCase(key), value])
);

console.log(normalized);
// { userName: 'ivan_petrov', userAge: 35, userEmail: 'ivan@example.com' }

Создание индекса из массива

Преобразование массива объектов в хеш-таблицу для быстрого поиска по ключу:

const users = [
  { id: 1, name: 'Алексей' },
  { id: 2, name: 'Наталья' },
  { id: 3, name: 'Сергей' }
];

const usersById = Object.fromEntries(
  users.map(user => [user.id, user])
);

console.log(usersById[2]); // { id: 2, name: 'Наталья' }
console.log(usersById[3]); // { id: 3, name: 'Сергей' }

Валидация данных формы

const formData = {
  username: 'john_doe',
  email: '',
  password: 'pass'
};

const errors = Object.fromEntries(
  Object.entries(formData)
    .filter(([_, value]) => !value)
    .map(([key]) => [key, `Поле «${key}» обязательно для заполнения`])
);

console.log(errors);
// { email: 'Поле «email» обязательно для заполнения' }

Инвертирование ключей и значений

const codeToName = {
  ru: 'Русский',
  en: 'English',
  de: 'Deutsch'
};

const nameToCode = Object.fromEntries(
  Object.entries(codeToName).map(([key, value]) => [value, key])
);

console.log(nameToCode);
// { Русский: 'ru', English: 'en', Deutsch: 'de' }

Важные особенности

Только собственные перечисляемые свойства

Все три метода работают исключительно с собственными перечисляемыми свойствами. Унаследованные свойства из прототипа не попадают в результат:

function Animal(name) {
  this.name = name;
}
Animal.prototype.type = 'animal';

const dog = new Animal('Бобик');

console.log(Object.keys(dog));    // ['name']
console.log(Object.values(dog));  // ['Бобик']
console.log(Object.entries(dog)); // [['name', 'Бобик']]
// Свойство 'type' из прототипа не включается

Символы не включаются

Свойства с ключами типа Symbol игнорируются всеми тремя методами:

const id = Symbol('id');
const obj = {
  [id]: 123,
  name: 'Тест'
};

console.log(Object.keys(obj));    // ['name']
console.log(Object.values(obj));  // ['Тест']
console.log(Object.entries(obj)); // [['name', 'Тест']]

// Для символов используйте отдельный метод:
console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(id)]

Неперечисляемые свойства

Свойства, созданные через Object.defineProperty с enumerable: false, тоже не попадают в результат:

const obj = {};

Object.defineProperty(obj, 'hidden', {
  value: 'скрыто',
  enumerable: false
});

obj.visible = 'видно';

console.log(Object.keys(obj));    // ['visible']
console.log(Object.values(obj));  // ['видно']

Порядок свойств

Методы возвращают свойства в следующем порядке:

  1. Целочисленные ключи по возрастанию
  2. Строковые ключи в порядке добавления
const mixed = {
  b: 'second string',
  1: 'first number',
  a: 'first string',
  2: 'second number'
};

console.log(Object.keys(mixed));
// ['1', '2', 'b', 'a'] — числовые ключи идут первыми

Сравнение методов

Метод Возвращает Когда использовать
Object.keys() Массив ключей Нужны только имена свойств
Object.values() Массив значений Нужны только данные, ключи не важны
Object.entries() Массив пар [ключ, значение] Нужен доступ и к ключу, и к значению

Итог

Object.keys(), Object.values() и Object.entries() — фундаментальный инструментарий для работы с объектами в JavaScript. Они открывают весь арсенал методов массивов для обработки объектных данных: фильтрацию, трансформацию, агрегацию. В связке с Object.fromEntries() эти методы позволяют писать чистый функциональный код без мутаций исходных данных.

Чтобы глубже освоить JavaScript и уверенно работать с объектами, массивами и современными API языка, приходите на курс JavaScript с нуля на PurpleSchool.

Стрелочка влевоJavaScript Proxy и ReflectОбъекты в JavaScriptСтрелочка вправо

Постройте личный план изучения Javascript до уровня Middle — бесплатно!

Javascript — часть карты развития Frontend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Javascript

Как работает метод trim() - JavaScriptКак работает метод toUpperCase() - JavaScriptКак работает метод toLowerCase() - JavaScriptКак работает метод substring() - JavaScriptКак работает метод startsWith() - JavaScriptКак работает метод split() - JavaScriptКак работает метод slice() - JavaScriptКак работает метод search() - JavaScriptКак работает метод replaceAll() - JavaScriptКак работает метод replace() - JavaScriptКак работает метод repeat() - JavaScriptКак работает метод padStart() - JavaScriptКак работает метод padEnd() - JavaScriptКак работает метод matchAll() - JavaScriptКак работает метод match() - JavaScriptКак работает метод localeCompare() - JavaScriptКак работает свойство length - JavaScriptКак работает метод lastIndexOf() - JavaScriptКак работает метод indexOf() - JavaScriptКак работает метод includes() - JavaScriptКак работает метод fromCodePoint() - JavaScriptКак работает метод fromCharCode() - JavaScriptКак работает метод endsWith() - JavaScriptКак работает метод concat() - JavaScriptКак работает метод codePointAt() - JavaScriptКак работает метод charCodeAt() - JavaScriptКак работает метод charAt() - JavaScript
Итератор в JavaScript
try...catch в JavaScriptError в JavaScript
Событие wheel в JavaScriptСобытие unload в JavaScriptСобытие touch в JavaScriptСобытие submit в JavaScriptСобытие scroll в JavaScriptСобытие reset в JavaScriptМетод .preventDefault() в JavaScriptСобытие mouseover в JavaScriptСобытие mouseout в JavaScriptСобытие load в JavaScriptСобытие keyup в JavaScriptСобытие keydown в JavaScriptСобытие invalid в JavaScriptСобытие input в JavaScriptСобытийная модель Event в JavaScriptОбъект события Event в JavaScriptСобытие DOMContentLoaded в JavaScriptСобытие dblclick в JavaScriptСобытие click в JavaScriptСобытие change в JavaScriptСобытие beforeunload в JavaScript
Как работает метод some() - JavaScriptКак работает метод reverse() - JavaScriptКак работает метод reduce() - JavaScriptКак работает метод map() - JavaScriptКак работает метод isArray() - JavaScriptКак работает метод indexOf() - JavaScriptКак работает метод includes() - JavaScriptКак работает метод from() - JavaScriptКак работает метод forEach() - JavaScriptКак работает метод flatMap() - JavaScriptКак работает метод flat() - JavaScriptКак работает метод findIndex() - JavaScriptКак работает метод find() - JavaScriptКак работает метод filter() - JavaScriptКак работает метод every() - JavaScriptМассивы в JavaScriptArray.at, findLast, findLastIndex — новые методы массивов
Открыть базу знаний

Лучшие курсы по теме

изображение курса

Основы JavaScript

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Next.js - с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий