javascript - values - Cómo manejar la regla eslint no-param-reassign en las funciones Array.prototype.reduce()
sum all array values javascript (2)
Bueno, podría hacer (result, item) => Object.assign({}, result, {[item]: whatever})
para crear un nuevo objeto en cada iteración :-)
Si quiere engañar al cursor, puede usar => Object.assign(result, {[item]: whatever})
(que hace lo mismo que su código actual pero sin una asignación explícita), pero sí, supongo que simplemente debe deshabilitar esa regla
Recientemente he agregado la regla eslint no-param-reassign
.
Sin embargo, cuando uso reduce
para generar un objeto (objeto vacío como valor initialValue
), necesito modificar el accumulator
(primer argumento de la función de devolución de llamada) en cada iteración de devolución de llamada, lo que provoca una queja de reenvío de no-param-reassign
paramar (como uno esperaría que lo haría).
const newObject = [''a'', ''b'', ''c''].reduce((result, item, index) => {
result[item] = index; // <-- causes the no-param-reassign complaint
return result;
}, {});
¿Hay una mejor manera de construir un objeto con reduce
que no modifique el argumento del accumulator
?
¿O debería simplemente deshabilitar la regla de alineación para esa línea en mis funciones de reduce
devolución de llamada?
Estoy revisando esta pregunta para publicar una nueva respuesta que finalmente se me ocurrió usando el operador de propagación de objetos ) ...
const newObject = [''a'', ''b'', ''c''].reduce((result, item, index) => ({
...result,
[item]: index,
}), {});