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:
const scores = { математика: 95, физика: 87, химия: 92 };
const scoreMap = new Map(Object.entries(scores));
console.log(scoreMap.get('физика'));87
Сортировка объекта по значениям:
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 }Фильтрация свойств объекта:
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' }Подсчет суммы значений:
const orders = { заказ1: 1500, заказ2: 3200, заказ3: 800 };
const total = Object.entries(orders)
.reduce((sum, [_, value]) => sum + value, 0);
console.log(total);5500
Итерация с деструктуризацией:
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 обычно работают с ассоциативными массивами напрямую.