JavaScript遍历对象数组:非指定分支代码仅执行一次实现方法
问题修复方案
你只需要在循环外增加一个执行标记,就能控制非特殊项的代码块仅执行一次,不会随循环多次触发。
修改后可直接运行的代码
// 标记位:记录普通项的代码块是否已经执行过,初始为未执行 let commonCodeExecuted = false; // 注意循环变量i要加let声明,避免污染全局作用域 for(let i = 0; i < list.length; i++) { const item = list[i]; if(item.label === 'Required scenario only') { // 匹配到特殊项时,正常执行对应逻辑,每匹配到一次就执行一次 // 此处写Required scenario only对应的业务代码 } else { // 非特殊项先判断标记,没执行过才跑代码 if(!commonCodeExecuted) { // 此处写whatever对应的业务代码,全程只会执行1次 commonCodeExecuted = true; } } }
逻辑说明
- 标记变量
commonCodeExecuted初始值为false,定义在循环外层,不会随每次循环迭代重置 - 遍历到label为
Required scenario only的项时,直接执行对应专属逻辑,和原有预期一致 - 第一次遍历到label为
whatever的项时,检查到标记为false,执行公共代码后立刻将标记置为true - 后续遍历到剩余的
whatever项时,检测到标记已经为true,会直接跳过公共代码块,不会重复触发
可选实现(无顺序要求时使用)
如果你不需要严格按照数组顺序穿插执行两类逻辑,也可以先拆分两类数据再处理,代码可读性更高:
// 先处理所有特殊项 list.forEach(item => { if(item.label === 'Required scenario only') { // 执行特殊项对应代码 } }); // 只要数组存在非特殊项,公共代码就执行1次 if(list.some(item => item.label !== 'Required scenario only')) { // 执行whatever对应的公共代码 }
注意:该实现会先跑完所有特殊项的逻辑,再执行公共代码,如果业务要求遇到第一个非特殊项就立刻执行公共代码,请使用前面的标记位方案。
内容的提问来源于stack exchange,提问作者Siddharth Thakor
相关产品推荐
相关产品推荐

