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

JavaScript有效括号代码中map[stack[stack.length-1]]含义及map用法咨询

代码逻辑解答

这是典型的有效括号匹配算法实现,针对你的疑问逐一说明:

1. map[stack[stack.length - 1]]的具体含义

我们从内到外逐层拆解表达式:

  • stack是存储未匹配左括号的栈结构,stack.length - 1是栈顶元素的索引,因此stack[stack.length - 1]代表当前栈顶存储的左括号(比如(/[/{)
  • 这里的map是普通的JavaScript对象,作用是存储「左括号→对应右括号」的映射关系,用栈顶取出的左括号作为key,就能通过map[左括号]拿到该左括号匹配的正确右括号,比如map['(']的返回值就是)

2. 关于对象属性访问的疑问

你印象里的「对象属性访问要加引号」仅针对点访问法(比如map.xxx),这种写法要求属性名是符合标识符规则的静态字符串,不能是特殊字符也不能是变量。
而代码里用的是方括号访问法,方括号内部可以放任意变量/表达式,JS会自动把表达式的运算结果转为字符串作为属性名查找,完全不需要手动加引号,是完全合法的对象属性访问写法。

3. 第9行整体逻辑

整行判断的作用是校验当前遍历到的字符是否和栈顶左括号匹配:

  • 先判断stack.length > 0保证栈非空,避免取栈顶元素时报错
  • 再判断当前遍历的字符s[i]是否等于栈顶左括号对应的右括号
  • 如果两个条件都满足,说明这对括号匹配成功,执行stack.pop()弹出栈顶的左括号;否则就把当前字符压入栈中
  • 遍历结束后如果栈长度为0,说明所有括号都成功匹配,返回true,否则返回false

拓展:Map数据结构的替代用法

如果你想用更规范的键值对映射结构,也可以用ES6新增的Map数据结构实现相同功能,写法如下:

const map = new Map([
  ['(', ')'],
  ['[', ']'],
  ['{', '}']
])
// 取值时用map.get(key)即可,比如map.get(stack[stack.length - 1])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:09:01