JavaScript带条件遍历arrayObjects如何仅在循环结束后打印一次日志
JavaScript 遍历对象数组后统一打印日志的实现方案
实现思路
- 新增标记变量记录匹配状态:遍历开始前初始化
hasFound变量为false,用于记录是否找到符合status为good的项 - 遍历过程中仅更新状态不打印结果:匹配到目标条件时修改标记变量,同时存储需要输出的匹配内容
- 所有遍历完成后统一输出结果:根据标记变量的状态,仅执行一次
console.log打印
调整后的完整代码
var arrayObjects = [{ "building": "A", "status": "good" }, { "building": "B", "status": "horrible" } ]; // 初始化状态标记和匹配结果存储变量 var hasFound = false; var matchedLog = ''; for (var i = 0; i < arrayObjects.length; i++) { // 若不需要打印每个遍历到的对象,可删除下行 console.log(arrayObjects[i]); for (key in arrayObjects[i]) { if (key == "status" && arrayObjects[i][key] == "good") { hasFound = true; matchedLog = key + "->" + arrayObjects[i][key]; } } } // 遍历全部完成后仅打印一次 if (hasFound) { console.log(matchedLog); } else { console.log("nothing found"); }
优化简化版本
如果你的判断逻辑仅针对status字段,不需要遍历对象的所有属性,可以去掉内层for in循环,直接读取属性判断,性能更高:
var arrayObjects = [{ "building": "A", "status": "good" }, { "building": "B", "status": "horrible" } ]; var hasFound = false; var matchedLog = ''; for (var i = 0; i < arrayObjects.length; i++) { console.log(arrayObjects[i]); if (arrayObjects[i].status === 'good') { hasFound = true; matchedLog = 'status->' + arrayObjects[i].status; // 如果只需匹配第一个符合条件的项,可加break跳出循环,减少无效遍历 // break; } } if (hasFound) { console.log(matchedLog); } else { console.log("nothing found"); }
内容的提问来源于stack exchange,提问作者Ian Barber
相关产品推荐
相关产品推荐

