javascript - How to remove spaces and special characters from string? -
i have function returns true if character form of punctuation , i'm trying write function accepts string , removes spaces , punctuation marks while calling first function. got of think. i'm stuck. appreciated.
var ispunct = function(ch) { if (ch = ch.match(/[,.!?;:'-]/g)) return true else return false } //b var compress = function(s) { var result = ""; //loop traverse s (var = 0; < s.length; i++) { if (!(ispunct(ch)); //(ispunct(s.charat(i) || s.charat(i) == " ")); //do nothing else result = result + !compress(i) } return result }
some issues:
the inner condition should in fact opposite: want nothing when is punctuation character, i.e. don't want add result. in other case want that.
the call
!compress(i)
wrong: first of function expects string, not index, , returns string, not boolean (so perform!
on it). seems want call function recursively, , although option, also iterating on string. should 1 of two: recursion or iteration.you reference variable
ch
incompress
function have not defined there.
so, if want write compress
iteration way, change code follows:
var compress = function(s) { var result = "", ch; // define ch. //loop traverse s (var = 0; < s.length; i++) { ch = s[i]; // initialise ch. if (!ispunct(ch)) result = result + ch; // add when not punctuation } return result; }
if on other hand want keep recursive call compress
, should away for
loop:
var compress = function(s) { var result = "", ch, rest; if (s.length == 0) return ''; result = compress(s.substr(1)); // recursive call ch = s[0]; if (!ispunct(ch)) result = ch + result; return result; }
the function ispunct
has strange thing happening: assigns boolean value ch
in if
expression. not make function malfunction, assignment serves no purpose: match
method returns boolean need if
condition.
it not nice-looking first evaluate boolean expression in if
return same value in form of false
, true
. can returning evaluated expression itself:
var ispunct = function(ch) { return ch.match(/[,.!?;:'-]/g); }
on final note, don't need ispunct
function if use in compress
. whole logic can performed in 1 function only, this:
let compress = s => s.replace(/[,.!?;:'-]/g,''); // demo: console.log(compress('a,b,c')); // abc
if prefer keep ispunct
, don't want repeat regular expression elsewhere, can replace this:
let ispunct = ch => ch.match(/[,.!?;:'-]/g); let compress = s => array.from(s).filter(ch => !ispunct(ch)).join(''); // demo: console.log(compress('a,b,c')); // abc
note how use of es6 arrow functions , es5 array methods makes code quite lean.
Comments
Post a Comment