You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取数组中第一个正整数?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 06:31:21