2010-06-06 6 views
3

Ce code trims espaces, (FYI: Il est créditée d'être très rapide)Comment ajouter correctement parenthèses à ce code

function wSpaceTrim(s){ 
    var start = -1, 
    end = s.length; 
    while (s.charCodeAt(--end) < 33); //here 
    while (s.charCodeAt(++start) < 33); //here also 
    return s.slice(start, end + 1); 
} 

Les boucles while ne sont pas entre parenthèses, comment pourrais-je ajouter correctement les supports à ce code?

while(iMean){ 
    // like this; 
} 

Merci beaucoup!

Répondre

7

Les corps de boucle sont vides (la chose réelle qui se produit est l'opération incrément/décrément dans la condition de la boucle), donc il suffit d'ajouter {}:

while (s.charCodeAt(--end) < 33){} 
while (s.charCodeAt(++start) < 33){} 

A plus, et probablement plus facile de lire la version du même boucle serait:

end = end - 1; 
while (s.charCodeAt(end) < 33) 
{ 
    end = end - 1; 
} 
start = start + 1; 
while (s.charCodeAt(start) < 33) 
{ 
    start = start + 1; 
} 
+0

si elles sont vides font-ils quoi que ce soit? – Mohammad

+0

Oh, ils changent les variables 'end' et' start' ne sont-ils pas? – Mohammad

+1

Peut-être ajouter un commentaire comme ceci: {/ * expliquant ce que vous faites ne nuira pas * /} – Oblio

2

Le code n'a pas besoin de crochets, mais il a besoin d'une option pour utiliser une méthode de découpage native. Opera, Firefox et Chrome ont tous une fonction de trim de prototype de chaîne natif - les autres navigateurs pourraient également l'ajouter. Pour cette méthode particulière, je pense que je voudrais un singe un peu avec le String.prototype, afin d'utiliser la méthode intégrée dans la mesure du possible.

if(!String.prototype.trim){ 
    String.prototype.trim= function(){ 
     var start= -1, 
     end= this.length; 
     while(this.charCodeAt(--end)< 33); 
     while(this.charCodeAt(++start)< 33); 
     return this.slice(start, end + 1); 
    } 
} 

Cela peut en effet être rapide, mais je préfère simple-

if(!(''.trim)){ 
    String.prototype.trim= function(){ 
     return this.replace(/^\s+|\s+$/g,''); 
    } 
} 
+0

Je m'attendrais à ce que cela soit plutôt rapide, puisque la fonction replace est implémentée en C ou en C++ (quel que soit le nom du navigateur). C'est un peu plus lent car il utilise des regexps, mais être compilé en code natif est probablement plus que compensant cela. – intuited

Questions connexes