如何使用短路逻辑改写满足条件即终止的for循环?
简化实现方案
方案1:原生findIndex实现(推荐,最简洁)
直接用JS数组内置的findIndex方法,一行就能替换整个for循环逻辑,自动匹配第一个满足条件的元素下标,匹配失败返回-1:
let range = []; // 直接返回第一个非空Set的下标 range[0] = buckets.findIndex(set => set.size > 0);
如果需要完全对齐原有逻辑(所有buckets都为空时不赋值range[0]),可以结合短路逻辑实现:
let range = []; const firstNonEmptyIdx = buckets.findIndex(set => set.size > 0); // 短路逻辑:只有找到有效下标时才执行赋值 firstNonEmptyIdx >= 0 && (range[0] = firstNonEmptyIdx);
方案2:保留for循环,用短路逻辑简化if判断
如果不想改动原有循环结构,直接把if块替换为短路表达式即可,逻辑和原代码完全等价:
let range = new Array() for (let i = 0; i < buckets.length; i++) { // 短路逻辑:仅当Set非空时,才执行赋值和跳出循环操作 buckets[i].size > 0 && (range[0] = i, break); }
说明
- 两种实现都满足找到第一个非空Set就终止遍历的要求,不会产生多余的遍历开销
&&短路逻辑的核心是:只有左侧表达式的运算结果为真值时,才会执行右侧的表达式,刚好可以替代单分支if的效果- 优先推荐
findIndex方案,可读性更高,符合现代JS语法规范
内容的提问来源于stack exchange,提问作者somniumm
相关产品推荐
相关产品推荐

