Object.fromEntries() в JavaScript

Object.fromEntries() создает объект из пар [ключ, значение].

let entries = [
  ['name', 'Анна'],
  ['age', 28],
];

let user = Object.fromEntries(entries);

console.log(user); // { name: 'Анна', age: 28 }

Метод удобен, когда данные уже лежат в виде массива пар и их нужно превратить обратно в объект.

Что делает Object.fromEntries()

Object.fromEntries() выполняет обратную работу по отношению к Object.entries().

let user = {
  name: 'Анна',
  age: 28,
};

let entries = Object.entries(user);

console.log(entries);
// [['name', 'Анна'], ['age', 28]]

console.log(Object.fromEntries(entries));
// { name: 'Анна', age: 28 }

Object.entries() превращает объект в массив пар, а Object.fromEntries() превращает такой массив обратно в объект.

Синтаксис

Object.fromEntries(iterable);

iterable - перебираемая структура, внутри которой лежат пары [ключ, значение].

Чаще всего это массив массивов или результат работы Object.entries().

Массив пар в объект

Самый простой пример - массив, где каждый вложенный массив состоит из двух элементов.

let productEntries = [
  ['title', 'Книга'],
  ['price', 1200],
  ['inStock', true],
];

let product = Object.fromEntries(productEntries);

console.log(product);
// { title: 'Книга', price: 1200, inStock: true }

Первый элемент пары становится именем свойства, второй - значением.

Связка с Object.entries()

Частый сценарий: превратить объект в массив, обработать его методами массива и собрать объект обратно.

let prices = {
  book: 1200,
  pen: 100,
  bag: 3000,
};

let expensiveItems = Object.entries(prices).filter((item) => {
  return item[1] > 1000;
});

let result = Object.fromEntries(expensiveItems);

console.log(result); // { book: 1200, bag: 3000 }

Сначала Object.entries() сделал из объекта массив пар. Затем filter() оставил только товары дороже 1000. После этого Object.fromEntries() собрал новый объект.

Map в объект

Object.fromEntries() умеет работать не только с массивом пар, но и с Map.

let map = new Map([
  ['name', 'Анна'],
  ['age', 28],
]);

let user = Object.fromEntries(map);

console.log(user); // { name: 'Анна', age: 28 }

Map тоже хранит данные как пары ключ-значение, поэтому метод может собрать из него обычный объект.

Повторяющиеся ключи

Если один и тот же ключ встречается несколько раз, останется последнее значение.

let entries = [
  ['theme', 'light'],
  ['theme', 'dark'],
];

let settings = Object.fromEntries(entries);

console.log(settings); // { theme: 'dark' }

Это похоже на обычный объект: у него не может быть двух разных свойств с одним и тем же именем.

Что можно передавать

В Object.fromEntries() нужно передавать не обычный объект, а набор пар.

let user = {
  name: 'Анна',
  age: 28,
};

Object.fromEntries(user); // TypeError

Если нужно преобразовать объект, сначала получите пары через Object.entries().

let entries = Object.entries(user);
let copy = Object.fromEntries(entries);

console.log(copy); // { name: 'Анна', age: 28 }

Здесь Object.entries() подготовил данные в нужном формате.

Итого

  • Object.fromEntries() создает объект из пар [ключ, значение].
  • Метод часто используют вместе с Object.entries().
  • Сначала объект можно превратить в массив, обработать его и собрать обратно.
  • Object.fromEntries() также работает с Map.
  • Если ключи повторяются, в объект попадет последнее значение.