You need to enable JavaScript to run this app. Codewars JS数组基础题:步行校验函数测试不通过调试求助
优惠活动
大模型
产品
解决方案
定价
更多

Codewars JS数组基础题:步行校验函数测试不通过调试求助

代码问题定位与修正

核心逻辑错误点

  • 坐标计算维度错误:当前代码把水平方向(东/西)和垂直方向(北/南)的位移全部累加在同一个变量y上,只要变量总和为0就判定回到起点,但实际回到起点需要满足两个独立条件:南北方向位移总和为0(北走的街区数 = 南走的街区数)、东西方向位移总和为0(东走的街区数 = 西走的街区数)。
    举个会触发测试失败的输入示例:['n','n','n','n','e','s','w','w','w','w'](共10步)。按当前代码计算,单变量累加结果为41(北)+11(东)-11(南)-41(西)=0,代码会误判为回到起点,但实际最终位置为垂直方向距起点3个街区、水平方向距起点3个街区,完全不满足返回起点的要求。
  • 冗余的分支判断:findEndPosition函数中额外增加了Arr.length >10 返回false的判断,这个判断完全重复了外层walkTime的长度校验逻辑,属于冗余代码,不会直接引发错误但会降低代码可读性。

修正方案

把位移计算拆分为独立的水平、垂直两个维度的计数,同时简化整体逻辑:

  1. 首先判断路线长度是否严格等于10,不满足直接返回false
  2. 分别统计南北、东西方向的位移总和:北为正、南为负;东为正、西为负
  3. 当两个方向的位移总和都为0时,才返回true,否则返回false

修正后的代码参考

const isValidWalk = (walk) => {
    // 严格校验步行时长刚好为10分钟
    if (walk.length !== 10) return false;
    // 拆分两个独立维度的位移计数
    let x = 0; // 东西方向:东+1,西-1
    let y = 0; // 南北方向:北+1,南-1
    walk.forEach(step => {
        switch(step) {
            case 'n': y++; break;
            case 's': y--; break;
            case 'e': x++; break;
            case 'w': x--; break;
        }
    })
    // 两个维度位移都为0才代表回到起点
    return x === 0 && y === 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 20:18:04