虽然循环应在字符串的末尾附加封闭的括号,但字符串未修改

问题描述 投票:0回答:1

我编写了一个函数,该函数接受包含括号的字符串,在字符串中循环,并使用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)

应该产生字符串'(((()))'的值但是,从函数返回的值似乎只是输入字符串。当登录到控制台时,自动收录器显示预期值。

我不确定这里发生了什么,我尝试追加到字符串变量末尾的方式似乎出了点问题,但我不确定它可能是什么。

javascript string while-loop append concatenation
1个回答
0
投票

您不修改原始字符串,而是在修改名为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('((( )');
© www.soinside.com 2019 - 2024. All rights reserved.