Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Перебор и функции 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, age

Object.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); // 500

Object.entries — пары

Object.entries() возвращает массив пар [ключ, значение]. В цикле for...of каждую пару сразу раскладывают на две переменные — такая запись называется деструктуризацией, ей посвящён отдельный урок:

const user = { name: 'Анна', age: 25 };
 
for (const [key, value] of Object.entries(user)) {
  console.log(`${key}: ${value}`);
}
// name: Анна
// age: 25

Object.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

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.