SamG
SamG

Reputation: 303

Manually remove whitespace in String - JavaScript

I have attempted to make an algorithm that will do the same thing as this function: var string= string.split(' ').join('');

So if I have the following String: Hello how are you it becomes Hellohowareyou

I don't want to use .replace or regex or .split

However, the algorithm doesn't seem to make any changes to the String:

var x = prompt("Enter String");

for (var i=0; i<=x.length;i++) {
     if (x[i] == " ") {
         x[i] = "";
     }
 }

alert(x);

Upvotes: 3

Views: 168

Answers (5)

Ruan Mendes
Ruan Mendes

Reputation: 92274

Iterate over the string copying characters, skipping spaces. Your code doesn't work because strings are immutable, so you cannot change characters within the string by doing x[i] = 'c'.

See Are JavaScript strings immutable? Do I need a "string builder" in JavaScript?

var string =  'Hello     How    are you';
var noSpaces = '';
for (var i = 0; i < string.length; i++) {
  if (string.charAt(i) != ' ' ) {
    noSpaces += string.charAt(i);
  }
}

alert(noSpaces);

Upvotes: 3

BenG
BenG

Reputation: 15154

Another approach, which updates the variable x and does not use another variable is to use a reverse for loop and use slice to take the string before and after i:-

var x = prompt("Enter String");

for (var i = x.length; i--;) {
  if (x[i] == " ") {
    x = x.slice(0, i) + x.slice(i + 1, x.length);
  }
}

alert(x);

Or, a reverse for loop with substr :-

var x = prompt("Enter String");

for (var i = x.length; i--;) {
  if (x[i] == " ") {
    x = x.substr(0, i) + x.substr(i + 1);
  }
}

alert(x);

Upvotes: 2

Rohit
Rohit

Reputation: 179

Hie ,

Please check below code. Its lengthy. But others can help to make it short. Check output

var x = prompt("Hello       how   are   you");
y = ''
flag = false
for (var i=0; i<x.length;i++) {

  if (x[i] == " ") {
     flag= true
  }
  else {

     if (flag == true) {
         y += ' '
         y += x[i]
         flag = false
     }
     else {
         y += x[i] 
     }
  }
}

alert(y)

Output is : "Hello how are you"

Code just sets a flag when you get a space in x[i] & when you get next character its just add single space instead of whitespace & adds next character to output string & again sets flag to false.

Upvotes: -2

Rajaprabhu Aravindasamy
Rajaprabhu Aravindasamy

Reputation: 67187

Your code is not working because, probably for strings, similar to a getter, there is no setter for indexed approach(x[0] = "w"). You cannot consider a string as an array. Its a special form of object (immutable object) that can be accessed with index, but strictly there is no setter in this approach.

You can fix your code by changing like below,

var x = prompt("Enter sum or 'e' to Exit");
var modified = "";

for (var i=0; i<x.length;i++) {
     if (x[i] != " ") {
         modified += x[i];
     }
 }

alert(modified);

And you can do this in other better ways like below by using regex,

var x = prompt("Enter sum or 'e' to Exit");
x = x.replace(/\s/g,"");

Upvotes: 3

lalitpatadiya
lalitpatadiya

Reputation: 720

In your code you just compare the value and try to replace with same variable but it's not possible to replace same with variable, just stored your value with new variable some thing like below

var x = prompt("Enter sum or 'e' to Exit");
var v='';
for (var i=0; i<x.length;i++) {
     if (x[i] != " ") {
         v +=x[i];
     }
 }

alert(v);

Here is the link https://jsfiddle.net/rqL3cvog/

Upvotes: 2

Related Questions