JS数组检测'(not set)'元素逻辑错误排查与修正
二维数组检测'(not set)'元素的逻辑错误排查与修正
需求说明
现有两种二维数组results:
- 包含
['(not set)', '87793', '6000']这类元素的数组 - 以
['key', '87793', '6000']开头的数组
要求:如果数组中存在'(not set)'元素,执行console.log('Not Set Data is there');否则执行console.log('Not Set Data is not found')。
用户原代码
var results = [ ['(not set)', '87793', '1261928.2330840048'], ['(other)', '1146', '28096.821814000003'], ['test', '22', '215.958067'] ] var final = {}; for (var i = 0; i < results.length; i++) { console.log(results[i][0]); if (results[i][0] === '(not set)' || results[i][0] === '') { final.status = 'Not Set is found'; } else { final.status = 'Not Set is NOT found'; } } console.log(final)
错误原因
循环里每遍历一个元素就会覆盖final.status的值。哪怕前面已经找到'(not set)'并设置了final.status = 'Not Set is found',后面遍历到其他元素时,又会把状态改成'Not Set is NOT found',最终结果只反映最后一个元素的判断,而非数组中是否存在目标元素。
修正方案
方案一:循环找到目标后终止遍历
var results = [ ['(not set)', '87793', '1261928.2330840048'], ['(other)', '1146', '28096.821814000003'], ['test', '22', '215.958067'] ] var final = { status: 'Not Set is NOT found' }; // 初始默认不存在 for (var i = 0; i < results.length; i++) { console.log(results[i][0]); if (results[i][0] === '(not set)' || results[i][0] === '') { final.status = 'Not Set is found'; break; // 找到后直接终止循环,避免后续覆盖 } } console.log(final); // 按需求输出对应日志 if (final.status === 'Not Set is found') { console.log('Not Set Data is there'); } else { console.log('Not Set Data is not found'); }
方案二:用数组some方法简化逻辑
some方法会遍历数组,只要有一个元素满足条件就返回true,代码更简洁直观:
var results = [ ['(not set)', '87793', '1261928.2330840048'], ['(other)', '1146', '28096.821814000003'], ['test', '22', '215.958067'] ] const hasNotSet = results.some(item => item[0] === '(not set)' || item[0] === ''); if (hasNotSet) { console.log('Not Set Data is there'); } else { console.log('Not Set Data is not found'); }
内容的提问来源于stack exchange,提问作者Arif Ahmed
相关产品推荐
相关产品推荐

