Как собрать объект из пар через Object.fromEntries в JavaScript

Как собрать объект из пар через Object.fromEntries в JavaScript
Содержание статьи

Object.fromEntries создаёт объект из последовательности пар «ключ, значение». Это удобно, когда данные уже представлены массивом пар или Map. В разборе Mentoring.digital проверим, что происходит с одинаковыми ключами и почему преобразование не заменяет группировку.

Преобразуем пары в объект

const pairs = [
  ["theme", "light"],
  ["language", "ru"],
  ["theme", "dark"],
];

const settings = Object.fromEntries(pairs);
console.log(settings.theme);    // "dark"
console.log(settings.language); // "ru"

Для повторяющегося имени свойства сохраняется последнее переданное значение. Метод не создаёт массив из "light" и "dark" и не сообщает об их конфликте. Если дубликат должен считаться ошибкой, проверьте его до преобразования.

Пустой набор пар даёт пустой объект. Каждый элемент входной последовательности должен представлять пару, из которой можно прочитать ключ и значение. Обычный массив строк не соответствует этому формату.

Переходим от Map к обычным свойствам

const source = new Map([
  ["name", "Ada"],
  ["active", true],
]);

const user = Object.fromEntries(source);
console.log(user.name);   // "Ada"
console.log(user.active); // true

const numbered = Object.fromEntries([[7, "seven"]]);
console.log(numbered["7"]); // "seven"

У объекта обычные ключи свойств имеют строковый вид; также поддерживаются символы. Поэтому при переносе сложных ключей из Map нужно учитывать преобразование. В частности, если ключами служат сами объекты и важна их идентичность, сохраняйте Map.

Не путаем преобразование с копированием данных

Метод создаёт новый внешний объект, но не выполняет глубокое копирование вложенных значений. Если значением пары был изменяемый объект, в результате останется ссылка на него. Изменение вложенного объекта будет видно через эту ссылку.

Данные, полученные извне, требуют проверки допустимых имён и типов. Сам факт успешного вызова fromEntries не подтверждает, что полученный объект соответствует вашей модели настроек. Например, значение "true" останется строкой, если вы передали именно строку.

Задание на проверку границ

Преобразуйте пустой массив, массив с повторным ключом и массив с вложенным объектом. Для каждого случая заранее запишите ожидаемый результат. Затем решите, нужны ли вашей задаче отказ при повторе, группировка значений или обычная замена последним значением.

Такие преобразования можно включить в обучение JavaScript на практических задачах. Модель входных данных и проверки разберите с наставником по JavaScript.

Похожие статьи по данной теме