如何获取数组中第一个正整数?JS代码输出异常问题排查
问题:为什么我的JavaScript代码输出数组第二个正整数而非第一个?
先拆解你两段代码的错误逻辑:
第一段for...of循环的问题
你写的判断条件是if (values[number] >= 0),这里的number是数组的元素值,不是索引。实际执行流程是:
- 第一个元素是
-1,values[-1]返回undefined,不满足>=0 - 第二个元素是
5,values[5]对应数组第6个元素-5,小于0,不满足 - 第三个元素是
-6,values[-6]返回undefined,不满足 - 第四个元素是
6,values[6]对应数组第7个元素3,满足>=0,所以输出6并终止循环
你要判断的是当前元素本身是否为正整数,而非以当前元素为索引的数组值。
第二段for...in循环的问题
for...in遍历的是数组的索引(字符串类型),且你的代码没加break,所以会输出所有对应值为正整数的索引:1、3、6、7、9、10、12。你看到的6只是其中一个索引,而你实际需要的是第一个正整数的值,不是索引。
修正后的代码
用for...of实现(推荐)
直接判断当前元素是否为正整数,找到后立即输出并终止循环:
let values = [-1, 5, -6, 6, -10, -5, 3, 4, -1, 8, 1, -10, 3]; for (const number of values) { if (number > 0) { // 直接判断当前元素是否为正整数 console.log(number); break; } } // 输出:5(数组第一个正整数)
用for...in实现(不推荐用for...in遍历数组,更适合对象)
如果一定要用,需先取到对应的值,判断后输出并终止:
let values = [-1, 5, -6, 6, -10, -5, 3, 4, -1, 8, 1, -10, 3]; for (const key in values) { const number = values[key]; if (number > 0) { console.log(number); break; } } // 输出:5
额外:用数组find方法更简洁
let values = [-1, 5, -6, 6, -10, -5, 3, 4, -1, 8, 1, -10, 3]; const firstPositive = values.find(num => num > 0); console.log(firstPositive); // 输出:5
内容的提问来源于stack exchange,提问作者Arin Avanusyan
相关产品推荐
相关产品推荐

