Преобразование массива в объект с именем ключа

#javascript #node.js #arrays #object #ecmascript-2018

Вопрос:

Каков наилучший способ преобразования:

 [2019,2020,2021]
 

Для

 {
  0: {year:2019},
  1: {year:2020},
  2: {year:2021}
}
 

Комментарии:

1. @Barmar Предлагаемый ответ не дает спокойных ответов, так как конечным результатом должен быть объект, а не просто значения массива.

2. Хорошо, хотя это простая модификация.

3. Почему вам нужен объект с цифровыми ключами вместо массива?

Ответ №1:

Пожалуйста, попробуйте это:

 a = [2019,2020,2021];
a.reduce((acc, val, idx)=> {acc[idx] = {year: val}; return acc;}, {});
 

Комментарии:

1. мы создаем 1 объект из массива. Поэтому мы сокращаем массив. Мэй создаст еще один массив. Хотя вопрос действительно поднимает вопрос о том, должен ли он быть массивом, а не объектом.

Ответ №2:

Сочетание Object.assign() и array.map() приходит на ум:

 const array = [2019,2020,2021];

const object = Object.assign({}, array.map(a => ({year: a})));
console.log("object:", object);


const object2 = {}
array.forEach((a, i) => object2[i] = {year: a});
console.log("object2:", object2);