我编写了一个函数,该函数接受包含括号的字符串,在字符串中循环,并使用for循环计算打开和关闭括号的数量。然后,应该使用while循环在字符串上循环,而开放括号的数量大于封闭括号的数量,并将封闭括号附加到字符串中。我的示例代码:
function closeThoseParens(string) {
let openTicker = 0;
let closedTicker=0;
for (let i = 0; i < string.length; i++) {
if (string[i] === '(') {
openTicker++;
console.log(openTicker);
} else if (string[i] === ')') {
closedTicker++;
}
}
while (openTicker > closedTicker){
string += ")"
closedTicker++;
console.log(closedTicker);
}}
调用该函数:
let string = '((( )';
closeThoseParens(string)
应该产生字符串'(((()))'的值但是,从函数返回的值似乎只是输入字符串。当登录到控制台时,自动收录器显示预期值。
我不确定这里发生了什么,我尝试追加到字符串变量末尾的方式似乎出了点问题,但我不确定它可能是什么。
您不修改原始字符串,而是在修改名为string
的局部变量。这就是为什么每次迭代都必须将加法结果重新分配回string
的原因。与其尝试变异一个参数,不如返回一个新参数通常更好。
要使其正常工作,您可以执行类似操作
function closeThoseParens(string) {
let openTicker = 0;
let closedTicker=0;
let closedParens = string;
for (let i = 0; i < string.length; i++) {
if (string[i] === '(') {
openTicker++;
console.log(openTicker);
} else if (string[i] === ')') {
closedTicker++;
}
}
while (openTicker > closedTicker){
closedParens += ")"
closedTicker++;
console.log(closedTicker);
}
return closedParens;
}
console.log(closeThoseParens('((( )');