J'ai récemment ajouté la règle eslint no-param-reassign
.
Cependant, lorsque j'utilise reduce
pour construire un objet (objet vide sous la forme initialValue
), je me retrouve à devoir modifier le accumulator
(premier arg de la fonction de rappel) à chaque itération de rappel, ce qui provoque un no-param-reassign
plainte linter (comme on pourrait s'y attendre).
const newObject = ['a', 'b', 'c'].reduce((result, item, index) => {
result[item] = index; // <-- causes the no-param-reassign complaint
return result;
}, {});
Y a-t-il une meilleure façon de construire un objet avec reduce
qui ne modifie pas l'argument accumulator
?
Ou dois-je simplement désactiver la règle de peluchage pour cette ligne dans mes fonctions de rappel reduce
?
Je revisite cette question pour poster une nouvelle réponse qui m'est finalement venue à l'aide de opérateur de propagation d'objet ) ...
const newObject = ['a', 'b', 'c'].reduce((result, item, index) => ({
...result,
[item]: index,
}), {});
Eh bien, vous pouvez faire (result, item) => Object.assign({}, result, {[item]: whatever})
Pour créer un nouvel objet à chaque itération :-)
Si vous voulez tromper le linter, vous pouvez utiliser => Object.assign(result, {[item]: whatever})
(qui fait la même chose que votre code actuel mais sans affectation explicite), mais oui, je suppose que vous devez simplement désactiver cette règle.
Je viens d'envelopper les fonctions de réduction dans un bloc de désactivation de la règle de peluches, à savoir:
/* eslint-disable no-param-reassign */
const newObject = ['a', 'b', 'c'].reduce((result, item, index) => {
result[item] = index;
return result;
}, {});
/* eslint-enable no-param-reassign */