Результат преобразования массива в объект зависит от того, как выглядит исходный массив и от того, что мы хотим получить на выходе. Решить проблему можно либо перебором массива, либо используя специальные методы.
Рассмотрим случаи, когда из массива необходимо получить объект, и способы их реализации.
Object.assign()
Метод Object.assign() был представлен стандартом ES6. Суть его заключается в том, что он копирует значения свойств из одного или нескольких исходных объектов в целевой. Целевой объект укажем пустым, а значения свойств будут браться из массива. Поскольку самих свойств в массиве нет, они будут заменены порядковыми номерами элементов.
const names = ['Иван', 'Олег', 'Петр', 'Глеб'];
const obj = Object.assign({}, names); // {0: 'Иван', 1: 'Олег', 2: 'Петр', 3: 'Глеб'}
Спред-оператор (...)
Суть этого оператора похожа на вышеописанный метод Object.assign(). В новый объект скопируются значения массива, свойствами которых будут их индексы.
const names = ['Иван', 'Олег', 'Петр', 'Глеб'];
const obj = {...names}; // {0: 'Иван', 1: 'Олег', 2: 'Петр', 3: 'Глеб'}
Цикл for
Более простым и обычным способом преобразования массива в объект будет использование цикла for, в котором каждая итерация будет расширять объект.
const names = ['Иван', 'Олег', 'Петр', 'Глеб'];
const obj = {};
for (let i = 0; i < names.length; i++) {
obj[i] = names[i];
}
console.log(obj); // => {0: 'Иван', 1: 'Олег', 2: 'Петр', 3: 'Глеб'}
reduce()
Метод reduce() применяется для перебора массива и совершения операций с его элементами. Передавая ему объект в качестве первого параметра, мы можем на каждой итерации расширять объект очередной парой ключ-значение и возвращать его.
const names = ['Иван', 'Олег', 'Петр', 'Глеб'];
const obj = names.reduce((object, value, index) => {
return {...object, [index]: value};
}, {});
console.log(obj); // => {0: 'Иван', 1: 'Олег', 2: 'Петр', 3: 'Глеб'}
Object.fromEntries
Этот метод может обрабатывать массив немного другого формата, создавая объект с ключами и их значениями согласно данным массива. Каждый элемент массива должен быть массивом из двух элементов, которые и преобразуются в пару ключ-значение.
const names = [
['name', 'Иван'],
['age', 35],
['city', 'Сидней'],
];
const obj = Object.fromEntries(names);
console.log(obj); // => {name: 'Иван', age: 35, city: 'Сидней'}