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

关于方向简化函数及stack[stack.length-1]用法的技术疑问

方向化简函数(dirReduc)疑问解答

1. dirReduc函数的工作逻辑

这个函数靠**栈(Stack)**的思路实现相反方向抵消,核心流程如下:

  • 先创建一个空栈stack,用来存最终要保留的方向
  • 逐个遍历输入的方向数组:
    • 拿当前方向和栈顶的方向(也就是栈里最后一个元素)对比,判断是不是相反方向(NORTH对应SOUTH,EAST对应WEST)
    • 如果是相反方向,说明这两个方向可以互相抵消,直接把栈顶的元素删掉(stack.pop())
    • 如果不是相反方向,就把当前方向加到栈里(stack.push(direction))
  • 遍历完所有方向后,栈里剩下的就是没法抵消的方向数组,直接返回就行

举个实际例子:输入['NORTH', 'SOUTH', 'EAST', 'WEST', 'NORTH']

  1. 第一个方向NORTH,栈是空的,直接加入,栈变为['NORTH']
  2. 第二个方向SOUTH,和栈顶NORTH相反,弹出栈顶,栈变空
  3. 第三个方向EAST,栈为空,加入栈,栈变为['EAST']
  4. 第四个方向WEST,和栈顶EAST相反,弹出栈顶,栈变空
  5. 第五个方向NORTH,栈为空,加入栈,栈变为['NORTH']
    最终返回['NORTH']

2. 栈为空时stack[stack.length - 1]的处理

当栈为空时,stack.length是0,所以stack.length - 1等于-1。在JavaScript里,访问数组的-1索引会得到undefined——因为数组的合法索引是从0开始的,负数索引没有对应的元素。

那代码为啥不会报错?这要靠逻辑或(||)的短路特性:
比如栈为空时,判断direction === 'NORTH' && stack[stack.length -1] === 'SOUTH',stack[stack.length -1]是undefined,和'SOUTH'对比结果是false,整个&&表达式就成了false。另外三个判断分支同理也都是false,所以整个if条件不成立,代码会自动走到else分支,把当前方向压入栈里,完全不会触发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:55:19