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

HackerRank Compare the Triplets挑战中split()读取报错问题排查

问题分析与修复

1. 输入读取错误原因

你碰到的TypeError: Cannot read properties of undefined (reading 'split'),是因为readLine()没有读取到任何内容,返回了undefined,对undefined调用split()必然触发报错。

根据挑战描述,题目要求编写接收两个数组作为参数的函数,而非直接从标准输入读取数据。你当前用readLine()读取输入的写法,不符合题目的函数式要求,这是核心问题之一。

2. 变量使用错误

代码里定义了得分变量aScore和bScore,但加分时却用了未定义的a++和b++,这会引发另一个ReferenceError,必须改成aScore++和bScore++。

3. 修正后的代码

符合题目要求的函数写法

function compareTriplets(a, b) {
    let aScore = 0;
    let bScore = 0;
    // 循环遍历比较,避免硬编码元素
    for (let i = 0; i < 3; i++) {
        if (a[i] > b[i]) {
            aScore++;
        } else if (a[i] < b[i]) {
            bScore++;
        }
        // 元素相等时不加分,无需额外处理
    }
    return [aScore, bScore];
}

若需自行读取输入的场景(适配部分HackerRank环境)

如果确实需要读取输入,要先确保readLine()的返回值有效,同时修复变量错误:

// 先处理readLine()的返回值,避免undefined
let aTemp = (readLine() || "").split(' ');
let bTemp = (readLine() || "").split(' ');

// 转换数组元素为数字,确保默认值
let a = aTemp.map(num => parseInt(num) || 0);
let b = bTemp.map(num => parseInt(num) || 0);

let aScore = 0;
let bScore = 0;

for (let i = 0; i < 3; i++) {
    if (a[i] > b[i]) {
        aScore++;
    } else if (a[i] < b[i]) {
        bScore++;
    }
}

console.log(aScore + ' ' + bScore);

额外优化建议

  • 不要硬编码数组的三个元素,用循环遍历更通用,也符合代码规范。
  • 用map批量转换数组元素,比逐个解析更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:42:12