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

Hackerrank比较三元组问题:为何两种forEach实现方案效果不同?

两种forEach实现的得分计算差异解析

问题说明

我了解已有不少关于比较三元组得分问题的讨论,这里想搞清楚为什么下面两个基于forEach的实现(方案X和方案Y)运行结果不一样:方案X用forEach的value参数对比数组A和同索引的数组B元素;方案Y则通过索引参数定位两个数组的元素做对比。

方案X代码

function compareTriplets(a, b) {
    
    let pointsA = 0; 
    let pointsB = 0;
    a.forEach((value, index) => {
        if(value > b[index]) {
           pointsA=+1
        } else if (value < b[index]) {
            pointsB=+1
        } 
        else {
            return;
        }
    })
    return [pointsA, pointsB];
}

方案Y代码

function compareTriplets(a, b) {
    
    let ascore = 0, bscore = 0;
    a.forEach((item, i) => {
        (a[i] > b[i]) && ascore++;
        (b[i] < b[i]) && bscore++;
    });

    return [ascore, bscore];
}

输入示例

17 28 30
99 16 8

差异原因分析

方案X的错误

方案X里的pointsA=+1和pointsB=+1是赋值操作,不是累加。=+1的意思是把变量直接设为1,而不是在原有数值上加1。正确的累加写法应该是pointsA += 1或者pointsA++。这就导致不管满足多少次得分条件,最终pointsA和pointsB只能是0或1,无法正确累计得分。

方案Y的错误

方案Y的第二个判断条件写错了:(b[i] < b[i])是一个永远为假的表达式(一个数不可能小于它自己),所以bscore永远不会增加。正确的条件应该是a[i] < b[i]或者b[i] > a[i]。这直接导致方案Y无法正确计算B的得分。

预期正确结果

针对给定的输入示例,正确得分应该是[2, 1](A在28>16、30>8时各得1分,B在17<99时得1分)。方案X会返回[1,1],方案Y会返回[2,0],这就是两者表现不同的核心原因。

内容的提问来源于stack exchange,提问作者Exodus Reed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:55:18