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

如何修复JavaScript函数以正确识别偶数数组中的奇数?

问题分析与修复:findOutlier函数返回错误值的原因

问题根源

测试数组[0, 1, 2]时,函数返回0而非预期的1,核心原因是阈值设置不符合“多数”的实际语义:

  • 数组中偶数有0和2,共2个,总长度3,偶数占比约66.67%,低于设定的80%阈值,因此isMostlyEven返回false。
  • findOutlier进入“查找偶数”的分支,第一个元素0是偶数,直接被返回,而非目标奇数1。
  • 80%的阈值对于短数组(如长度3)过于严苛,需要至少3个元素全是偶数才会判定为“以偶数为主”,这显然不符合“找少数异常值”的需求。

修复方案

方案1:调整阈值为50%(多数的标准定义)

将findOutlier中调用isMostlyEven的阈值从80改为50,只要某类数占比超过一半,就判定为“为主”的类别。同时优化代码细节(直接用数组长度替代循环计数,返回原数而非绝对值):

function isMostlyEven(array, thresholdPercentage) {
    let evenCount = 0;
    const totalCount = array.length; // 直接取数组长度,无需循环计数

    for (let num of array) {
        if (num % 2 === 0) {
            evenCount++;
        }
    }

    const evenPercentage = (evenCount / totalCount) * 100;
    return evenPercentage >= thresholdPercentage;
}
  
function findOutlier(integers){
    // 调整阈值为50%,符合“多数”的常规定义
    if (isMostlyEven(integers, 50)) {
        // 在偶数为主的数组中找奇数
        for (let num of integers) {
            if (Math.abs(num) % 2 === 1) {
                return num; // 返回原数,保留正负号
            }
        }   
    } else {
        // 在奇数为主的数组中找偶数
        for (let num of integers) {
            if (Math.abs(num) % 2 === 0) {
                return num;
            }
        }
    }
}

const intArr = [0, 1, 2]; 
console.log(findOutlier(intArr)); // 输出1

方案2:直接判断“多数”,避免百分比精度问题

如果不需要动态阈值,可以简化isMostlyEven的逻辑,直接判断偶数数量是否超过总数的一半,这样更高效且避免百分比计算的精度问题:

function isMostlyEven(array) {
    let evenCount = 0;
    const totalCount = array.length;

    for (let num of array) {
        if (num % 2 === 0) {
            evenCount++;
        }
    }

    // 偶数数量超过总数一半,判定为以偶数为主
    return evenCount > totalCount / 2;
}
  
function findOutlier(integers){
    if (isMostlyEven(integers)) {
        for (let num of integers) {
            if (Math.abs(num) % 2 === 1) {
                return num;
            }
        }   
    } else {
        for (let num of integers) {
            if (Math.abs(num) % 2 === 0) {
                return num;
            }
        }
    }
}

const intArr = [0, 1, 2]; 
console.log(findOutlier(intArr)); // 输出1

内容的提问来源于stack exchange,提问作者Jefferson Chukwu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:02:40