【问题标题】:If-statement executes everything but return-statementif 语句执行除 return 语句之外的所有操作
【发布时间】:2022-01-02 17:22:41
【问题描述】:

我试图了解堆栈是如何通过代码工作的。现在,我尝试编写一个简单的括号匹配程序:我编写了链表实现,并用它在 JS 中实现堆栈。这个想法是遍历字符串中的所有字符并将开括号放入堆栈中。在此之后,如果没有匹配的顶括号,函数应该返回 false。主要问题是,if 语句执行除了 return 语句之外的所有内容。

输入:([(a()]])

所需输出:false

function isBalanced(string) {
  let stack = new Stack();
  [...string].forEach(char => {
    let bracket
    if (char === '[' || char === '(') {
      stack.push(char)
    } else {
      if (stack.isEmpty()) {
        return false
      }

      bracket = stack.pop().data
      console.log(`PAIR: ${bracket}${char}`)
      if (!(bracket === "[" && char === "]") && !(bracket === "(" && char === ")")) {
        console.log("working")
        return false
      }
    }});

    return stack.isEmpty();
}

let string = '([(a()]])'

console.log(isBalanced(string))

我使用console.log() 来检查我的语句是否有效以及它适用于哪些对。

控制台输出如下:

PAIR: (a
working
PAIR: ()
PAIR: []
PAIR: (]
working
true

正如你所看到的,当语句为真时,它肯定是有效的,但它不会调用内部返回语句(在第一个'working' 输出之后,控制台中应该没有更多的对;只有false) .问题出在哪里?

【问题讨论】:

  • .forEach() 方法会忽略其回调函数的所有返回值。因此,.forEach() 回调中的 return 基本上是无用的。
  • @Pointy 谢谢!将 .forEach() 更改为 for (let char in string) 有帮助!
  • 'a' 是什么,你要忽略它吗?
  • @NinaScholz 是的,我想忽略a,我认为它工作得很好

标签: javascript stack


【解决方案1】:

您可以将Array#every 与堆栈长度检查一起使用,并在回调内部返回每个正确字符true

function isBalanced(string) {
    const
        closed = { '(': ')', '[': ']' },
        stack = [];
    return [...string].every(char => {
        if (char === '[' || char === '(') {
            stack.push(char);
            return true;
        }
        if (!stack.length) return false;
        const bracket = stack.pop();
        console.log(`PAIR: ${bracket}${char}`);
        return closed[bracket] === char;
    }) && !stack.length;
}

console.log(isBalanced('(([()]))'));
console.log(isBalanced('([(a()]])'));
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2019-01-27
    相关资源
    最近更新 更多