当前位置:  开发笔记 > 编程语言 > 正文

如何在Array.prototype.reduce()函数中处理eslint no-param-reassign规则

如何解决《如何在Array.prototype.reduce()函数中处理eslintno-param-reassign规则》经验,为你挑选了2个好方法。

我最近添加了eslint规则no-param-reassign.

但是,当我reduce用来构建一个对象(空对象initialValue)时,我发现自己需要accumulator在每次回调迭代时修改(回调函数的第一个arg),这会引起一个no-param-reassignlinter投诉(正如人们所期望的那样).

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

是否有更好的方法来构建一个reduce不修改accumulator参数的对象?

或者我应该简单地在reduce回调函数中禁用该行的linting规则?



1> sfletche..:

我正在重新审视这个问题,以便使用对象扩展运算符发布最终发生的新答案)...

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


这真是一个很好的解决方案吗?减少具有许多元素的数组,比如2000,将创建尽可能多的新对象实例,例如2000.

2> Bergi..:

好吧,你可以(result, item) => Object.assign({}, result, {[item]: whatever})在每次迭代时创建一个新对象:-)

如果你想欺骗linter,你可以使用=> Object.assign(result, {[item]: whatever})(它与你当前的代码相同但没有明确的赋值),但是我想你应该简单地禁用该规则.


是的,这有点像我想的那样.也许禁用该行的规则是最好的选择......
推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有