Values: примеры (JAVASCRIPT)

Метод Object.values() для получения значений объекта в JavaScript
Раздел: Объекты, Итерация
values: Array Iterator

Основы метода Object.values()

Object.values()

— это статический метод, который возвращает массив значений перечисляемых свойств объекта. Метод появился в стандарте ECMAScript 2017 (ES8).

Синтаксис метода: Object.values(obj), где obj — объект, чьи значения свойств требуется получить.

Метод возвращает массив, содержащий значения всех перечисляемых свойств объекта. Порядок значений соответствует порядку, который обеспечивается циклом for...in. Возвращается только массив значений, без ключей.

Важно отметить, что метод не возвращает значения символовых свойств, даже если они перечисляемые. Для получения значений символовых свойств можно использовать Object.getOwnPropertySymbols().

Если передать примитивное значение вместо объекта, оно будет преобразовано в объект-обертку: null и undefined вызовут TypeError, а другие примитивы будут преобразованы соответствующим образом.

Базовые примеры использования

Пример с простым объектом:

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

Пример со строковыми ключами в разном порядке:

const obj2 = { 10: 'десять', 2: 'два', 1: 'один' };
console.log(Object.values(obj2));
['один', 'два', 'десять']

Пример с объектом без свойств:

console.log(Object.values({}));
[]

Пример с преобразованием примитива:

console.log(Object.values('строка'));
['с', 'т', 'р', 'о', 'к', 'а']

Похожие методы в JavaScript

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

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

for...in — цикл для перебора перечисляемых свойств объекта. Подходит для случаев, когда нужна более сложная логика обработки, чем просто получение массива значений.

Array.prototype.map() на результате Object.keys() — альтернативный способ получения значений, если нужно их дополнительно преобразовать.

Типичные ошибки

Попытка использовать на null или undefined:

Object.values(null);
TypeError: Cannot convert undefined or null to object

Ожидание сохранения порядка свойств согласно их объявлению в объекте (для числовых ключей порядок будет основан на их числовом значении):

const obj = { 100: 'сто', 2: 'два', 11: 'одиннадцать' };
console.log(Object.values(obj));
['два', 'одиннадцать', 'сто']

Попытка получить значения неперечисляемых свойств:

const obj = {};
Object.defineProperty(obj, 'hidden', {
  value: 'секрет',
  enumerable: false
});
console.log(Object.values(obj));
[]

Изменения в спецификации

Метод Object.values() был добавлен в ECMAScript 2017 (ES8). До этого для получения значений объекта приходилось использовать комбинации других методов, например, Object.keys() с map().

С момента добавления метод не претерпел значительных изменений в поведении. Все современные браузеры и среды выполнения JavaScript поддерживают этот метод.

В последних версиях стандарта JavaScript метод продолжает работать согласно первоначальной спецификации без изменений в основных браузерах и Node.js.

Расширенные примеры применения

Использование с деструктуризацией для получения отдельных значений:

Пример javascript
const user = { name: 'Анна', age: 30, city: 'Москва' };
const [nameValue, ageValue] = Object.values(user);
console.log(nameValue, ageValue);
Анна 30

Подсчет суммы значений числовых свойств:

Пример javascript
const prices = { apple: 50, banana: 30, orange: 40 };
const total = Object.values(prices).reduce((sum, price) => sum + price, 0);
console.log(total);
120

Проверка наличия определенного значения в объекте:

Пример javascript
const config = { theme: 'dark', language: 'ru', notifications: true };
const hasDarkTheme = Object.values(config).includes('dark');
console.log(hasDarkTheme);
true

Сортировка объекта по значениям (с созданием нового объекта):

Пример javascript
const scores = { Alice: 90, Bob: 75, Charlie: 85 };
const sortedEntries = Object.entries(scores)
  .sort((a, b) => b[1] - a[1]);
const sortedByValues = Object.fromEntries(sortedEntries);
console.log(Object.values(sortedByValues));
[90, 85, 75]

Работа с вложенными объектами (получение значений из определенного свойства):

Пример javascript
const users = [
  { id: 1, name: 'Алексей' },
  { id: 2, name: 'Мария' },
  { id: 3, name: 'Иван' }
];
const names = Object.values(users).map(user => user.name);
console.log(names);
['Алексей', 'Мария', 'Иван']

Фильтрация значений определенного типа:

Пример javascript
const data = { a: 'текст', b: 42, c: true, d: 'еще текст', e: 100 };
const stringValues = Object.values(data).filter(val => typeof val === 'string');
console.log(stringValues);
['текст', 'еще текст']

Аналоги в других языках программирования

Python: метод dict.values() возвращает объект view, который можно преобразовать в список.

d = {'a': 1, 'b': 2}
print(list(d.values()))
[1, 2]

PHP: функция array_values() работает с массивами, возвращая все значения и сбрасывая ключи.

$arr = ['a' => 1, 'b' => 2];
print_r(array_values($arr));
Array
(
    [0] => 1
    [1] => 2
)

Java: через Map.values() получают коллекцию значений.

Map map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
System.out.println(map.values());
[1, 2]

Основное отличие JavaScript-реализации — возврат именно массива, а не специального объекта-представления или коллекции.

JS values function comments

En
Values Returns a new Array Iterator object that contains the values for each index in the array