Как обрабатывать правило eslint no-param-reassign в массиве.прототип.функция reduce() функции

недавно я добавил правило eslint no-param-reassign.

однако, когда я использую reduce построить объект (пустой объект как initialValue), мне нужно изменить accumulator (первый аргумент функции обратного вызова) на каждой итерации обратного вызова, которая вызывает no-param-reassign жалоба линтера (как и следовало ожидать).

const newObject = ['a', 'b', 'c'].reduce((result, item, index) => {
  result[item] = index; // <-- causes the no-param-reassign complaint
  return result;
}, {});

есть ли лучший способ построить объект с помощью reduce это не изменить accumulator спор?

или я должен просто отключить правило пылеобразования на эту строчку в моем reduce функции обратного вызова?

2 ответов


Я возвращаюсь к этому вопросу, чтобы опубликовать новый ответ, который, наконец, пришел мне в голову, используя оператор распространения объектов)...

const newObject = ['a', 'b', 'c'].reduce((result, item, index) => ({
  ...result,
  [item]: index, 
}), {});

Ну, вы могли бы сделать (result, item) => Object.assign({}, result, {[item]: whatever}) создать новый объект на каждой итерации :-)

Если вы хотите обмануть Линтер, вы можете использовать => Object.assign(result, {[item]: whatever}) (который делает то же самое, что и ваш текущий код, но без явного назначения), Но да, я думаю, вы должны просто отключить это правило.