Перебор и функции Object
У объекта нет методов map() или forEach(), как у массива. Зато есть встроенные функции Object.keys(), Object.values() и Object.entries(): они превращают объект в массив, а с массивом можно делать всё, что вы уже умеете.
Object.keys — имена свойств
Object.keys() возвращает массив ключей объекта в том порядке, в каком свойства были добавлены:
const user = { name: 'Анна', age: 25 };
console.log(Object.keys(user).join(', ')); // name, ageObject.values — значения
Object.values() возвращает массив значений. Это удобно, когда имена не важны — например, чтобы сложить все числа:
const expenses = { food: 300, transport: 120, cinema: 80 };
const total = Object.values(expenses).reduce((sum, value) => sum + value, 0);
console.log(total); // 500Object.entries — пары
Object.entries() возвращает массив пар [ключ, значение]. В цикле for...of каждую пару сразу раскладывают на две переменные — такая запись называется деструктуризацией, ей посвящён отдельный урок:
const user = { name: 'Анна', age: 25 };
for (const [key, value] of Object.entries(user)) {
console.log(`${key}: ${value}`);
}
// name: Анна
// age: 25Object.fromEntries — обратно в объект
Object.fromEntries() делает обратное: собирает объект из массива пар. Вместе с entries() это позволяет обработать объект методами массива:
const prices = { tea: 5, coffee: 12 };
const doubled = Object.fromEntries(
Object.entries(prices).map(([key, value]) => [key, value * 2]),
);
console.log(doubled.coffee); // 24Цикл for...in
Цикл for...in перебирает ключи объекта напрямую, без промежуточного массива:
const user = { name: 'Анна', age: 25 };
for (const key in user) {
console.log(key, user[key]);
}
// name Анна
// age 25Проверить, есть ли у объекта собственное свойство, можно функцией Object.hasOwn(user, 'age') — она вернёт true или false.
| Функция | Возвращает |
|---|---|
Object.keys(obj) | массив ключей |
Object.values(obj) | массив значений |
Object.entries(obj) | массив пар [ключ, значение] |
Object.fromEntries(pairs) | новый объект из пар |
Частая ошибка
У объекта нет свойства length, и обращение к нему вернёт undefined. Количество свойств узнают через длину массива ключей:
const user = { name: 'Анна', age: 25 };
console.log(user.length); // undefined
console.log(Object.keys(user).length); // 2