Object.fromEntries() создаёт объект из списка пар [ключ, значение].
Это очень удобный метод, когда данные уже представлены как массив пар или когда объект нужно сначала превратить через Object.entries(), а потом собрать обратно.
Синтаксис
Object.fromEntries(iterable)
iterable - это итерируемое значение, где каждый элемент является парой [ключ, значение].
Что делает Object.fromEntries()
Метод берёт пары ключ-значение и собирает из них обычный объект.
const entries = [
["name", "Anna"],
["age", 25],
];
const user = Object.fromEntries(entries);
console.log(user); // { name: "Anna", age: 25 }
Что возвращает Object.fromEntries()
Object.fromEntries() возвращает новый объект.
const result = Object.fromEntries([
["a", 1],
["b", 2],
]);
console.log(result); // { a: 1, b: 2 }
Это главное, что важно запомнить: результатом будет объект, а не массив.
Обратный метод к Object.entries()
Object.entries() превращает объект в массив пар.
Object.fromEntries() делает обратное.
const user = {
name: "Anna",
age: 25,
};
const entries = Object.entries(user);
const result = Object.fromEntries(entries);
console.log(entries); // [["name", "Anna"], ["age", 25]]
console.log(result); // { name: "Anna", age: 25 }
Поэтому эти методы часто используют вместе.
Работа с Map
Object.fromEntries() умеет работать не только с массивом, но и с любым итерируемым значением, например с Map.
const map = new Map([
["name", "Anna"],
["age", 25],
]);
const user = Object.fromEntries(map);
console.log(user); // { name: "Anna", age: 25 }
Это один из самых полезных сценариев использования метода.
Преобразование объекта через entries
Очень частый сценарий выглядит так:
- взять объект через
Object.entries() - изменить пары через
map()илиfilter() - собрать новый объект через
Object.fromEntries()
Пример:
const user = {
name: "Anna",
age: 25,
};
const upperUser = Object.fromEntries(
Object.entries(user).map(([key, value]) => [key, String(value).toUpperCase()]),
);
console.log(upperUser); // { name: "ANNA", age: "25" }
Фильтрация свойств объекта
Через Object.fromEntries() удобно собирать объект после фильтрации.
const user = {
name: "Anna",
age: 25,
city: "Moscow",
};
const shortUser = Object.fromEntries(
Object.entries(user).filter(([key]) => key !== "city"),
);
console.log(shortUser); // { name: "Anna", age: 25 }
Это один из самых популярных практических примеров.
Если ключи повторяются
Если в списке есть одинаковые ключи, победит последнее значение.
const result = Object.fromEntries([
["name", "Anna"],
["name", "Ivan"],
]);
console.log(result); // { name: "Ivan" }
Более поздняя пара перезапишет более раннюю.
Ключи объекта
Ключами обычно становятся строки или символы.
Если в качестве ключа передать число, оно будет преобразовано в строку:
const result = Object.fromEntries([
[1, "one"],
[2, "two"],
]);
console.log(result); // { 1: "one", 2: "two" }
Object.fromEntries() не меняет исходные данные
Метод создаёт новый объект и не изменяет исходный массив пар или Map.
const entries = [
["a", 1],
["b", 2],
];
const result = Object.fromEntries(entries);
console.log(entries); // [["a", 1], ["b", 2]]
console.log(result); // { a: 1, b: 2 }
Object.fromEntries() и Object.assign()
Оба метода могут привести к объекту, но работают по-разному.
const result = Object.fromEntries([
["name", "Anna"],
["age", 25],
]);
Object.fromEntries() собирает объект из пар.
Object.assign() копирует свойства из одного объекта в другой.
Это разные задачи.
Object.fromEntries() и reduce()
То же самое можно сделать через reduce(), но Object.fromEntries() обычно читается проще.
const entries = [
["name", "Anna"],
["age", 25],
];
const user = entries.reduce((acc, [key, value]) => {
acc[key] = value;
return acc;
}, {});
console.log(user); // { name: "Anna", age: 25 }
Через Object.fromEntries() этот код короче и понятнее.
Когда это полезно
Object.fromEntries() удобно использовать, когда:
- нужно собрать объект из массива пар
- нужно превратить
Mapв обычный объект - нужно отфильтровать или преобразовать объект через
Object.entries()
Пример:
const settings = [
["theme", "dark"],
["lang", "ru"],
];
const config = Object.fromEntries(settings);
console.log(config); // { theme: "dark", lang: "ru" }
Частые ошибки
Думать, что метод принимает обычный объект
const user = {
name: "Anna",
age: 25,
};
// Object.fromEntries(user); // TypeError
Методу нужен не объект, а итерируемый список пар.
Забывать, что каждый элемент должен быть парой
// Object.fromEntries(["name", "Anna"]); // Ошибка
Элементы должны выглядеть как [key, value].
Не учитывать, что одинаковые ключи перезаписываются
const result = Object.fromEntries([
["name", "Anna"],
["name", "Ivan"],
]);
console.log(result); // { name: "Ivan" }
Последняя пара выигрывает.
Быстрая памятка
Object.fromEntries()создаёт объект из пар[ключ, значение]- метод принимает итерируемое значение, а не обычный объект
Object.entries()делает обратное преобразование- если ключи повторяются, побеждает последнее значение
- метод особенно удобен вместе с
map()иfilter()
Коротко
Object.fromEntries() - это удобный способ собрать объект из массива пар или Map. Главное, что стоит запомнить: метод часто используют как обратную операцию к Object.entries(), особенно когда объект нужно сначала преобразовать, а потом собрать обратно.