Использование .map() вместо .forEach для создания объекта

Вот небольшая выборка данных, представляющая большой набор данных:

const data = [
    { id: 32, minimum: 200, maximum: 400 },
    { id: 16, minimum: 370, maximum: 390 },
    { id: 85, minimum: 700, maximum: 950 }
];

Необходимо создать объект из этих данных, используя id в качестве ключа и имея минимальное и максимальное значение в качестве значения, например:

Текущий подход к созданию этого объекта следующий:

let object = {};
data.forEach(o => {
    object[o.id] = { min: o.minimum, max: o.maximum }
});
console.info(object);

Хотя это работает, кажется, что должен быть более краткий способ написания этого кода.

Я экспериментировал с .map() -

const obj = data.map(o => ({[o.id]: { min: o.minimum, max: o.maximum }}));
console.info(obj);

Но вывод не в правильном формате -

Что нужно изменить в версии .map(), чтобы добиться нужного формата вывода?

уменьшить
Adam Jenkins 18.12.2020 19:57
map() всегда создает массив. Вот что он делает. Он берет один массив и переводит его в другой.
Taplar 18.12.2020 19:57
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Руководство ChatGPT по продаже мини JS-файлов
Руководство ChatGPT по продаже мини JS-файлов
JS-файл - это файл, содержащий код JavaScript. JavaScript - это язык программирования, который в основном используется для добавления интерактивности...
0
3
159
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
// mapper simply creates the object that you want from the one that you have - id as the key and min and max are the values
const mapper = ({ id, minimum: min, maximum: max }) => ({ [id]: { min, max } });

const obj = data.reduce((acc, obj) => ({
   ...acc,
   ...mapper(obj)
}), {});

Обновлено:

В то время как сокращение — правильный способ сделать это — вы уменьшаете массив до одной вещи, JavaScript позволяет вам делать разные вещи. Вот альтернативное решение с использованием карты и Object.assign:

const mapper = ({ id, minimum: min, maximum: max }) => ({ [id]: { min, max } });

const obj = Object.assign(...data.map(mapper));

Вы можете взять Object.fromEntries и сопоставьте записи.

const
    data = [{ id: 32, minimum: 200, maximum: 400 }, { id: 16, minimum: 370, maximum: 390 }, { id: 85, minimum: 700, maximum: 950 }],
    result = Object.fromEntries(
        data.map(({ id, minimum: min, maximum: max }) => [id, { min, max }])
    );

console.info(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Другие вопросы по теме