Ответ 1
Просто
const obj = {};
for (const key of yourArray) {
obj[key] = whatever;
}
или если вы предпочитаете "функциональный" стиль:
const obj = yourArray.reduce((o, key) => Object.assign(o, {[key]: whatever}), {});
используя современный оператор распространения объектов:
const obj = yourArray.reduce((o, key) => ({ ...o, [key]: whatever}), {})
Пример:
[
{ id: 10, color: "red" },
{ id: 20, color: "blue" },
{ id: 30, color: "green" }
].reduce((acc, cur) => ({ ...acc, [cur.color]: cur.id }), {})
Вывод:
{red: 10, blue: 20, green: 30}
Вот как это работает:
reduce
инициализируется пустым объектом (пустой {}
в конце), поэтому первые итерационные переменные являются acc = {}
cur = { id: 10, color: "red" }
. Функция возвращает объект - вот почему тело функции завернуто в круглые скобки => ({... })
. Оператор распространения не делает ничего на первой итерации, поэтому red: 10
устанавливается как первый элемент.
На вторых итерационных переменных: acc = { red: 10 }
cur = { id: 20, color: "blue" }
. Здесь оператор с расширением расширяет acc
и функция возвращает { red: 10, blue: 20 }
.
Третья итерация acc = { red: 10, blue: 20 }
cur = { id: 30, color: "green" }
, поэтому, когда acc
распространяется внутри объекта, наша функция возвращает окончательное значение.