遇到eslint禁止迭代器、需改用数组迭代的报错,如何解决?
报错触发原因
for...of属于迭代器语法,转译后会强制引入regenerator-runtime依赖,不符合你团队的体积控制规范- 显式循环写法不符合规范要求的「优先使用数组迭代方法」规则
改造方案
采用数组内置的every方法完全替换原有循环逻辑,该方法的特性和你原有逻辑完全匹配:只要有一个元素的校验返回false就会立刻终止迭代,整体返回false;所有元素校验通过则返回true。改造后代码如下:
return keys1.every(key => { const val1 = object1[key]; const val2 = object2[key]; const areObjects = isObject(val1) && isObject(val2); const areArrays = Array.isArray(val1) && Array.isArray(val2); if ( (areArrays && !compareArrays(val1, val2)) || (areObjects && !deepEqual(val1, val2)) || (!areObjects && val1 !== val2) ) { return false; } return true; });
改造效果
- 彻底移除了
for...of迭代语法,不会触发regenerator-runtime依赖引入,符合体积控制要求 - 采用标准数组迭代方法,符合lint规范要求
- 和原代码逻辑完全一致,没有额外性能损耗,也不会修改原有业务逻辑的返回结果
内容的提问来源于stack exchange,提问作者Giuseppe Fantoni
相关产品推荐
相关产品推荐

