【发布时间】:2017-07-06 17:58:15
【问题描述】:
背景
我正在学习有关 Udemy 的课程,该课程涵盖了所有 ES6 功能。在其中一课中,讲师谈到了使用 reduce 辅助方法来解决流行的平衡括号面试问题。
我可以在没有 reduce 方法的情况下解决这个问题。尽管使用 reduce 方法,它确实可以用更少的代码完成工作。我之前在一次采访中被要求找出括号的深度,并且想知道这是否可以使用 reduce 以相同的方法完成。
我不知道为什么这个问题的补充让我如此困惑,但我想学习。
问题
我一直在尝试弄明白,这可能是我对 reduce 的工作原理缺乏了解。
示例
这使用reduce返回true或false关于括号是否均匀打开和关闭。
function balanceParens(string) {
return !string.split("").reduce((counter, char) => {
// Handle if parens open and close out of order
if (counter < 0) { return counter; }
// Add 1 for each open in order
if (char === "(") { return ++counter; }
// subtract 1 for each close in order
if (char === ")") { return --counter; }
// handle use case if char is not a paren
return counter;
}, 0);
}
console.log(balanceParens("((()))"));
问题
如何使用 reduce 辅助方法返回括号的最大深度。
【问题讨论】:
-
其实reduce是在ES5中引入的……
-
如果没有
reduce,您将如何解决问题?如果您可以发布您的循环代码,我们可以帮助您将其转换为reduce。 -
是的,它是在 es5 中引入的。但是es6以上的课程,这只是他在es6课程中所说的。
-
@Bergi 当我回到家时,我可以发布一个不使用 reduce 的解决方案。但这将是几个小时。
-
一般来说,当你有符合
.reduce()模式的东西但你需要多个值时,你只需使用一个对象作为reduce目标。