我最近添加了eslint规则no-param-reassign
.
但是,当我reduce
用来构建一个对象(空对象initialValue
)时,我发现自己需要accumulator
在每次回调迭代时修改(回调函数的第一个arg),这会引起一个no-param-reassign
linter投诉(正如人们所期望的那样).
const newObject = ['a', 'b', 'c'].reduce((result, item, index) => { result[item] = index; // <-- causes the no-param-reassign complaint return result; }, {});
是否有更好的方法来构建一个reduce
不修改accumulator
参数的对象?
或者我应该简单地在reduce
回调函数中禁用该行的linting规则?
我正在重新审视这个问题,以便使用对象扩展运算符发布最终发生的新答案)...
const newObject = ['a', 'b', 'c'].reduce((result, item, index) => ({ ...result, [item]: index, }), {});
好吧,你可以(result, item) => Object.assign({}, result, {[item]: whatever})
在每次迭代时创建一个新对象:-)
如果你想欺骗linter,你可以使用=> Object.assign(result, {[item]: whatever})
(它与你当前的代码相同但没有明确的赋值),但是我想你应该简单地禁用该规则.