#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. это просто компактный подход без создания объектов поверх.