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

从推入数组的对象中获取最后一个键时遇TypeError问题排查

问题排查与修复

错误原因分析

  • 空栈访问错误:第一次循环时stack是空数组,stack[stack.length-1]返回undefined,此时尝试读取undefined[0]直接触发Cannot read properties of undefined (reading '0')错误。
  • 语法无效代码:原代码中有一行孤立的[Object.values(newObj).length-1]),属于无意义的语法错误,会导致代码解析失败。
  • 对象引用污染:共用外部的newObj,栈中存储的是对象引用,后续修改newObj会影响栈内所有已存入的对象,无法独立跟踪每个连续字符的计数。
  • 逻辑设计偏差:栈结构没有关联字符与连续出现次数,无法实现移除k个连续重复字符的核心需求。

修复后的代码实现

调整栈的存储结构,让每个栈元素独立存储字符和连续计数,同时修正错误逻辑:

var remove = function(s, k) {
    let stack = [];
    for(const char of s){
        const top = stack[stack.length - 1];
        // 打印栈顶字符(栈非空时)
        console.log(`stack: ${top ? top.char : '空'}`);

        if(top && top.char === char){
            top.count++;
            // 计数达到k时弹出栈顶
            if(top.count === k){
                stack.pop();
            }
        } else {
            stack.push({char, count: 1});
        }
    }
    // 可返回处理后的结果字符串
    return stack.map(item => item.char.repeat(item.count)).join('');
};

// 测试调用
const s = "deeedbbcccbdaa"; 
const k = 3;
remove(s, k);

修复说明

  • 规避空栈访问:先判断栈是否有元素,再读取栈顶字符,避免undefined访问错误。
  • 独立计数跟踪:每个栈元素是独立的{char, count}对象,不会互相干扰,准确记录连续字符的出现次数。
  • 修正核心逻辑:当连续计数达到k时弹出栈顶,符合移除k个连续重复字符的需求,同时正确打印栈顶字符。
  • 清除无效代码:删除原代码中多余的语法错误行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:03:14