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

Функция entries в JavaScript: от основ до продвинутых примеров
Раздел: Объекты, Итерация
entries: iterator

Основы метода entries

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

Когда используется:

Метод часто применяется для итерации по свойствам объекта, преобразования объекта в структуру, совместимую с Map, или для сериализации и дальнейшей обработки данных.

Аргументы:

Метод принимает один обязательный параметр: obj - объект, чьи собственные перечисляемые свойства должны быть возвращены.

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

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

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

const user = { name: 'Анна', age: 30 };
console.log(Object.entries(user));
[ ['name', 'Анна'], ['age', 30] ]
const arr = ['a', 'b', 'c'];
console.log(Object.entries(arr));
[ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]
const obj = { 100: 'сто', 2: 'два', 7: 'семь' };
console.log(Object.entries(obj));
[ ['2', 'два'], ['7', 'семь'], ['100', 'сто'] ]

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

Object.keys(obj) - возвращает массив только ключей (имен свойств) объекта.

Object.values(obj) - возвращает массив только значений свойств объекта.

for...in цикл - позволяет итерироваться по перечисляемым свойствам, но требует ручного доступа к значениям.

Map.prototype.entries() - метод экземпляра Map, возвращающий итератор пар [ключ, значение].

Метод Object.entries() предпочтительнее, когда нужен именно массив пар ключ-значение для дальнейших преобразований (например, с помощью map, filter). Object.keys() или Object.values() используют при необходимости работы только с одной частью данных.

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

1. Использование на необъектах (null, undefined).

console.log(Object.entries(null));
TypeError: Cannot convert undefined or null to object

2. Ожидание, что порядок свойств всегда соответствует порядку их объявления. Для числовых ключей порядок сортируется по возрастанию.

const obj = {b: 2, a: 1, 10: 'десять', 2: 'два'};
console.log(Object.entries(obj));
[ ['2', 'два'], ['10', 'десять'], ['b', 2], ['a', 1] ]

3. Забывание, что метод возвращает только перечисляемые свойства.

const obj = {};
Object.defineProperty(obj, 'hidden', { value: 'секрет', enumerable: false });
obj.visible = 'видно';
console.log(Object.entries(obj));
[ ['visible', 'видно'] ]

История изменений

Метод Object.entries() был стандартизирован в спецификации ECMAScript 2017 (ES8). До этого его можно было использовать через полифиллы. В последних версиях стандарта существенных изменений в его работе не было, но важно помнить, что в очень старых средах выполнения (например, Internet Explorer) он не поддерживается нативно.

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

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

Пример javascript
const scores = { математика: 95, физика: 87, химия: 92 };
const scoreMap = new Map(Object.entries(scores));
console.log(scoreMap.get('физика'));
87

Сортировка объекта по значениям:

Пример javascript
const items = { яблоки: 50, бананы: 30, груши: 40 };
const sorted = Object.entries(items)
    .sort((a, b) => a[1] - b[1])
    .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {});
console.log(sorted);
{ бананы: 30, груши: 40, яблоки: 50 }

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

Пример javascript
const data = { id: 1, name: 'Тест', password: 'secret', email: 'test@mail.com' };
const safeData = Object.entries(data)
    .filter(([key]) => key !== 'password')
    .reduce((obj, [key, val]) => ({ ...obj, [key]: val }), {});
console.log(safeData);
{ id: 1, name: 'Тест', email: 'test@mail.com' }

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

Пример javascript
const orders = { заказ1: 1500, заказ2: 3200, заказ3: 800 };
const total = Object.entries(orders)
    .reduce((sum, [_, value]) => sum + value, 0);
console.log(total);
5500

Итерация с деструктуризацией:

Пример javascript
const settings = { theme: 'dark', notifications: true, language: 'ru' };
for (const [key, value] of Object.entries(settings)) {
    console.log(`Настройка ${key}: ${value}`);
}
Настройка theme: dark
Настройка notifications: true
Настройка language: ru

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

Python (dict.items()):

user = {'name': 'Анна', 'age': 30}
print(list(user.items()))
[('name', 'Анна'), ('age', 30)]

PHP (get_object_vars() или (array) для простых случаев):

$user = (object)['name' => 'Анна', 'age' => 30];
print_r(get_object_vars($user));
Array ( [name] => Анна [age] => 30 )

C# (Dictionary):

var user = new Dictionary { {"name", "Анна"}, {"age", 30} };
foreach (var entry in user) {
    Console.WriteLine($"{entry.Key}: {entry.Value}");
}

Основное отличие - в JavaScript Object.entries() возвращает массив массивов, в то время как в Python items() возвращает объект view, а в PHP обычно работают с ассоциативными массивами напрямую.

JS entries function comments

En
Entries Returns a new array iterator object that contains the key/value pairs for each index in the array