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
相关产品推荐
相关产品推荐

