Javascript 如果返回false,则返回平衡括号

Javascript 如果返回false,则返回平衡括号,javascript,Javascript,我目前正在进行一个项目,主要检查给定的括号串是否平衡,例如: {()}返回true {(})返回false 我已经有了这个,但是如果返回false,是否有方法返回实际字符串?例如 {()返回{()}?如果您能给我指一个网站或一些非常受欢迎的东西我建议最简单的选择是重新创建匹配的开始括号和结束括号的预期输出字符串,如下所示: 1) 如果输入字符串的左括号多于右括号: 修剪字符串,使其仅使用左括号,然后附加到匹配的右括号上 括号 2) 如果输入字符串的结束括号多于开始括号: 在开始时修剪开口支架,然

我目前正在进行一个项目,主要检查给定的括号串是否平衡,例如: {()}返回true {(})返回false 我已经有了这个,但是如果返回false,是否有方法返回实际字符串?例如
{()返回{()}?如果您能给我指一个网站或一些非常受欢迎的东西

我建议最简单的选择是重新创建匹配的开始括号和结束括号的预期输出字符串,如下所示:

1) 如果输入字符串的左括号多于右括号: 修剪字符串,使其仅使用左括号,然后附加到匹配的右括号上 括号

2) 如果输入字符串的结束括号多于开始括号: 在开始时修剪开口支架,然后向后操作,然后预挂匹配的支架 打开括号

该算法将非常简单,并且在假设您不希望出现类似这样的情况的情况下工作 {(}(}),其中开始括号和结束括号未按顺序分组


如果您需要处理这类情况,可以采用类似的递归方法来纠正括号,从最左端和最右端的索引开始,向内查找匹配的括号并递归,如果没有匹配的括号,则假定Extremey中应该存在一个括号(左侧或右侧取决于找不到哪个支架)。

既然您已经有了该功能,请尝试以下功能:

const myFancySolution = (string) => { /* amazing solution */ }

// come up with a better name than this ⬇️
const valueOrTrue = (fn) => (val) => fn(val) ? true : val

const mySolutionOrSelf = valueOrTrue(myFancySolution)

如果你想对这个理论有更长远的看法,有一篇关于这个问题的很长的博文值得一读。我已经解决了如何返回true或false,只是我想使用实用函数输出实际的括号字符串;
const trueOrString=(string)=>mySolvingFunction(string)?true:string;
这是一个副作用,您可能不想让原始函数返回字符串,将其分解为函数样式。您可能想澄清问题,问题不是平衡括号;这分散了真正问题的注意力:如果函数返回false,如何从true/false函数中提取值o如果myFancySolution是我用来获取真或假的函数,而fn也是我的函数??你本质上是在使用一个函数为你的解决方案创建一个新的入口点:返回真或假的入口点,
valueOrTrue
返回一个将你的函数应用于其函数的函数,因此:
valueOrTrue((a)=>a==1)(2)
将返回2,或者如果你有一个函数
constAlwaysFalse=()=>false
并且你创建了一个函数
constAlwaysValue=valueOrTrue(alwaysFalse)
你可以像调用
alwaysValue('{}')/=>'{}'一样调用它。
是的,这可以工作,但我不想修剪,但要添加…就像我有{()我不想修剪一样{但改为向其添加},这样它将{()}而不是()上述方法将涵盖您建议的情况。如果您从{()开始,则有2个开始和1个结束。删除结束括号,这样您就只有{(然后为每个开始括号添加匹配的结束括号)。