带标签循环的替代方案:自定义对象集合去重规避linter no-labels报错
最优方案:使用Array.some()替代内层循环
用JS内置的some方法完全可以替代内层循环+label的写法,语义更明确,也不会触发no-labels规则,代码量和原有写法几乎一致:
for (const point of points) { // do and check some stuff // 只要存在匹配项就会终止遍历,返回true const hasDuplicate = collection.some(existingPoint => point.equals(existingPoint)) // 原有逻辑是遇到重复就终止整个外层循环,直接break即可 if (hasDuplicate) break collection.push(point) }
如果你的实际需求是跳过当前重复项、继续处理后续的点(更符合“保证集合元素唯一”的常见场景,大概率是之前label语法用错了),只需要把break改成continue即可:
for (const point of points) { // do and check some stuff const hasDuplicate = collection.some(existingPoint => point.equals(existingPoint)) if (hasDuplicate) continue collection.push(point) }
方案优势
- 没有额外的冗余代码、不需要封装独立函数/新增标记位,复杂度和原有label写法完全一致
- 语义更清晰,
some天生就是用来判断集合中是否存在符合条件的元素,其他开发者一眼就能看懂是查重逻辑 - 完全符合ESLint规范,不会触发no-labels告警
内容的提问来源于stack exchange,提问作者scenia
相关产品推荐
相关产品推荐

