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

JavaScript数组指令处理代码运行异常,请求帮忙排查错误原因

存在的3个核心错误

  • 初始获取数组的逻辑错误:commands.shift() 拿到的是字符串'23 -2 321 87 42 90 -123',没有转为数字数组就直接按数组索引操作,拿到的是单个字符而非数字元素。需要先按空格分割再转Number类型。
  • 变量重复声明语法错误:swap分支里已经用let声明了index1、index2,同一个函数作用域下multiply分支再次用let声明同名变量,会触发语法报错。可以给每个case的代码加花括号形成独立块级作用域,或者换变量名避免冲突。
  • decrease逻辑不生效:Array.map()是返回新数组的纯方法,不会修改原数组,当前写法执行后原数组完全没有变化,需要把map的返回值重新赋值给array,或者用forEach遍历修改原数组。

修正后的可运行代码

function solve(commands){
    // 修正点1:把拿到的字符串转成数字数组
    let array = commands.shift().split(' ').map(Number);
    commands.pop();
    for(let command of commands){
        let tokens = command.split(" ");
        let currentCommand = tokens[0];  
        switch(currentCommand){
            // 加{}形成单独块级作用域,避免变量名冲突
            case "swap": {
                let idx1 = Number(tokens[1]);
                let idx2 = Number(tokens[2]);
                let temp = array[idx1];
                array[idx1] = array[idx2];
                array[idx2] = temp;
                break;
            }
            case "multiply": {
                let idx1 = Number(tokens[1]);
                let idx2 = Number(tokens[2]);
                array[idx1] = array[idx1] * array[idx2];
                break;
            }
            case "decrease":
                // 修正点3:把map返回的新数组赋值回array
                array = array.map(x => x - 1);
                break;
        }
    }
    console.log(array);
}
solve([
'23 -2 321 87 42 90 -123',
'swap 1 3',
'swap 3 6',
'swap 1 0',
'multiply 1 2',
'multiply 2 1',
'decrease',
'end'
])

运行后输出结果为:[ 86, 6236, -3, -124, 41, 89, 22 ]


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:54:02