简体   繁体   中英

How can i make this code work properly, its based on a for-loop and is not completing its process

for (let i = 0; i < ans.length; i++) {
  ans = ans.replace(' ', '+');
  ans = ans.replace('  ', '+');
  ans = ans.replace('++', '+');
  //here ans is a value of an input.
}

Why is this stopping before completing the process?

You are performing the same action in each iteration of the loop, so the loop is redundant in this code block. If you meant to replace all occurrences, a regex replacement is better:

ans = ans.replace(/ /g, '+');
ans = ans.replace(/  /g, '+');
ans = ans.replace(/\+\+/g, '+');

If you are only targeting modern browsers, you can use replaceAll instead:

ans = ans.replaceAll(' ', '+');
ans = ans.replaceAll('  ', '+');
ans = ans.replaceAll('++', '+');

Well based on the code I see you want to get rid of spaces no matter how many in a row, So I suggest Regular Expression :

let ans = "im an input here   so you can see the stuff"
ans = ans.replace(/\s+/g , '+'); \* im+an+input+here+so+you+can+see+the+stuff *\

How ever as it's been said on Wais Kamal Answer you can use replaceAll() as well for different cases

Why is this stopping before completing the process?

To answer your only question, the loop ends prematurely because you write to ans variable and therefore change the length of ans (that is used as condition in the for loop). So if you shorten the length, it stops earlier.

But check others answers on how to write it better.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM