javascript - 扩展 Javascript array.reduce 辅助方法的使用

标签 javascript ecmascript-6

背景

我正在学习 Udemy 上的类(class),该类(class)介绍了所有 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 辅助方法返回括号的最大深度。

最佳答案

您可以在减少的同时保持当前深度和最大深度。

function maxDepth(string) {
    return string.split("").reduce(({current, max}, char) => {
        // Handle if parens open and close out of order
        if (current < 0) return {current, max}
        // Add 1 for each open in order
        if (char === "(") return { current: current + 1, max: Math.max(max, current + 1)}
        // subtract 1 for each close in order
        if (char === ")") return { current: current - 1, max}
        return {current, max}
    }, {current: 0, max: 0}).max;
}
console.log(maxDepth("(((()))(((())))()(((((()))))))"));

关于javascript - 扩展 Javascript array.reduce 辅助方法的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44955933/

相关文章:

Javascript Array.find() 存在稀疏数组问题

javascript - 组件未渲染

javascript - 如何使用 nodejs webdriver (wd) 检查警报是否打开

javascript - 如何以AngularJS方式制作双击可编辑表格?

c# - 从 C# 背后的代码访问 HTML 控件

asynchronous - 如何在生成器中使用 await?

javascript - WebRTC 流在第一帧后卡住

javascript - 如何使文本字段中的所有内容都是大写字母/大写字母?

javascript - 格式化第三方导入和其他导入之间的空行

javascript - 定义在模块中发生事件时调用的方法