Как перебрать значения объекта через Object.values()?

👨‍💻 Frontend Developer 🟠 Может встретиться 🎚️ Легкий
#JavaScript #Объекты #База JS

Краткий ответ

Object.values() возвращает массив значений всех перечисляемых свойств объекта. В отличие от for…in, он не перебирает унаследованные свойства и возвращает сразу значения, а не ключи.

const user = { name: 'Иван', age: 25 };
const values = Object.values(user);
console.log(values); // ['Иван', 25]

Полный ответ

Object.values() — это метод для получения всех значений свойств объекта. Он простой и удобный, когда нужно работать только со значениями, а не с ключами.

Как работает Object.values()

Возвращает массив значений свойств:

const user = { name: 'Иван', age: 25 };
const values = Object.values(user);
console.log(values); // ['Иван', 25]

Что возвращает Object.values()

Массив значений

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

Только собственные свойства

const obj = { name: 'Иван' };
// Не включает toString, hasOwnProperty и другие унаследованные методы

Простые примеры

Получение всех значений

const user = { 
  name: 'Иван', 
  age: 25, 
  city: 'Москва' 
};
 
const values = Object.values(user);
console.log(values); // ['Иван', 25, 'Москва']

Работа с массивом значений

const scores = { math: 5, physics: 4, chemistry: 5 };
 
// Сумма всех оценок
const total = Object.values(scores).reduce((sum, score) => sum + score, 0);
console.log(total); // 14

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

1. Порядок значений

// Порядок такой же, как в for...in
const obj = { 3: 'три', 1: 'один', 2: 'два', a: 'буква' };
console.log(Object.values(obj)); // ['один', 'два', 'три', 'буква']

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

const obj = { name: 'Иван' };
// Скрываем свойство
Object.defineProperty(obj, 'hidden', {
  value: 'секрет',
  enumerable: false
});
 
console.log(Object.values(obj)); // ['Иван'] - hidden не видно

Когда использовать Object.values()

Вместо for…in когда нужны только значения

const user = { name: 'Иван', age: 25 };
 
// ❌ Сложный способ
const values1 = [];
for (let key in user) {
  if (user.hasOwnProperty(key)) {
    values1.push(user[key]);
  }
}
 
// ✅ Простой способ
const values2 = Object.values(user);

Для работы с массивом значений

const prices = { apple: 100, banana: 50, orange: 80 };
 
// Найти максимальную цену
const maxPrice = Math.max(...Object.values(prices));
console.log(maxPrice); // 100

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

1. Ожидание ключей

// ❌ Думаем, что получим ключи
const obj = { a: 1, b: 2 };
const result = Object.values(obj);
console.log(result); // [1, 2] - значения, не ключи!
 
// ✅ Для ключей используем Object.keys()
const keys = Object.keys(obj);
console.log(keys); // ['a', 'b']

2. Работа с необъектами

// ❌ Попытка использовать с примитивами
Object.values(42); // Ошибка!
 
// ✅ Только с объектами
Object.values({ value: 42 }); // [42]

Простые правила

  1. Object.values() — для получения значений свойств
  2. Массив — всегда возвращает массив
  3. Собственные — только собственные свойства
  4. Порядок — сохраняется как в for…in
  5. Простота — проще, чем for…in для получения значений

Object.values() удобен, когда нужно работать только со значениями свойств объекта. Он проще, чем for…in, и не требует проверок на наследование.


Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪