Каков наиболее эффективный способ преобразования массива объектов в объект

#javascript #arrays

#javascript #массивы

Вопрос:

Попытка преобразовать массив объектов в один объект и массив, который у меня есть, аналогична следующему;

 const array = [{id: '1', name: 'First'}, {id: '2', name: 'Second'}];
 

Ожидаемый результат:

 {'first': 1, 'second': 2}
 

Кроме того, я хочу изменить оболочку всех значений на нижний регистр. Можно предположить, что между значениями имен нет пробелов. И все идентификаторы являются числами.

С точки зрения производительности, есть ли лучший подход, чем этот?

 const array = [{id: '1', name: 'First'}, {id: '2', name: 'Second'}];
console.log(array);
const result = array.reduce((accumulator, value) => {return {...accumulator, [value.name.toLowerCase()]: Number(value.id)}}, {});
console.log(result); 

Ответ №1:

Простой for ... of (или аналогичный), вероятно, будет наиболее производительным, поскольку у него нет накладных расходов на вызовы функций. Например:

 const array = [
  {id: '1', name: 'First'},
  {id: '2', name: 'Second'}
];

let result = {};

for (o of array) {
  result[o.name.toLowerCase()] = parseInt(o.id);
}
console.log(result); 

Ответ №2:

Я думаю, что использование стандартного цикла (for или while) было бы наиболее эффективным с точки зрения производительности, поскольку в нем нет никаких дополнительных элементов, таких как map, reduce, sort do.

Ответ №3:

Вы можете создавать записи и генерировать из них объект.

 const
    array = [{ id: '1', name: 'First' }, { id: '2', name: 'Second' }],
    object = Object.fromEntries(array.map(({ id, name }) => [name.toLowerCase(),  id]));

console.log(object); 

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

1. Не могли бы вы объяснить, почему это лучше, чем использование редуктора, пожалуйста?

2. это просто компактный подход без создания объектов поверх.