Методы JavaScript Object.keys, Values, Entries

В этой главе мы рассмотрим методы Object.keys, values и entries. Мы уже говорили о таких методах, как map.keys(), map.values(), map.entries().

Эти методы универсальны и используются для структур данных. Каждый раз после создания структуры данных они также должны быть реализованы. Они в основном используются для Map, Set и Array.

Подобные методы поддерживаются и обычными объектами, хотя синтаксис немного отличается.

Определение методов Object.keys, values и entries

Как правило, для простых объектов можно использовать следующие методы:

  • Для возврата массива ключей используется метод Object.keys(obj).
  • Для возврата массива значений используется метод Object.values(obj).
  • Для возврата массива пар [key, value], используется метод Object.entries(obj).

Есть существенные различия по сравнению с Map. Мы также рассмотрим их.

Первое отличие в том, что здесь нам нужно вызвать Object.keys(obj) а не obj.keys().

Основная причина - универсальность. Объекты считаются корнем всех сложных структур JavaScript.

Так, имея объект вроде data, который может выполнять свой собственный метод data.values(), вы также можете вызвать Object.values(data) на этом объекте. Другое важное отличие в том, что методы Object.* могут возвращать реальные массивы, а не итерируемые объекты.

Рассмотрим следующий пример:

Javascript object
let user = { name: "Jane", age: 41 }; console.log(user.name); // Jane console.log(user.age); // 41

Так, в приведенном выше примере у нас есть следующее:

  • Object.keys(user) = ["name", "age"]
  • Object.values(user) = ["Jack", 35]
  • Object.entries(user) = [ ["name","Jack"], ["age",35] ]

Для перебора значений свойств можно использовать Object.values так:

Javascript object values
let user = { name: "Jane", age: 41 }; for (let value of Object.values(user)) { console.log(value); // Jane, then 41 }

Методы Object.keys/values/entries схожи с циклом for..in: оба они игнорируют свойства, которые используют Symbol(...) в качестве ключа.

Если вам нужны символы, вы можете использовать отдельный метод Object.getOwnPropertySymbols, возвращающий массив, состоящий только из символьных ключей.

Преобразование объектов

Обычно у объектов нет методов массивов (например, filter, map и так далее).

Если вы хотите их использовать, можно применить метод Object.entries, за которым следует Object.fromEntries.

Вот последовательность действий:

  1. Применяем Object.entries(obj) для получения массива пар значений/ключей из obj.
  2. Применяем методы массивов к массиву.
  3. Применяем Object.fromEntries(array) к получившемуся массиву, чтобы превратить его обратно в объект.

Вот пример:

Javascript object entries method
let points = { john: 22, ann: 20, jack: 14, }; let doublePoints = Object.fromEntries( // convert to array, map, and then fromEntries returns an object Object.entries(points).map(([key, value]) => [key, value * 2]) ); console.log(doublePoints.john); // 44

Это средство позволяет делать полезные преобразования.

Время Викторины: Проверьте Свои Навыки!

отовы проверить свои знания? Погрузитесь в наши интерактивные викторины для более глубокого понимания и веселого способа закрепить знания.

Считаете ли это полезным?