2011-03-16 2 views
0

Je suis en train de trier des valeurs telles que « 200,32 M » ou « 800,80 B »tablesorter sur mesure Parser

La méthode actuelle j'utilise ne fonctionne pas sur. Quelqu'un connaît-il cela?

ts.addParser({ 
    id: 'mktcap', 
    is: function(s) { 
     return false; 
    }, 
    format: function(s) { 
     return s.replace(/M/,s+1000000).replace(/B/,s+1000000000); 
    }, 
    type: "numeric" 
}); 

Répondre

0

s.replace(/M/,s+1000000) semble étrange.
essayer cette place pour M (et même pour B, etc.)

var s = "200.32 M"; 
s = eval(s.replace(/ M/, " * 1000000")); 
// s = 200320000 

var s = "800.80 B"; 
s = eval(s.replace(/ B/, " * 1000000000")); 
// s = 800800000000 
+0

Cela a fonctionné comme un charme. Merci!!! – Jack

0

Je suis sûr que s.replace(/M/,s+1000000) ne fera pas ce que vous attendez. Dans le meilleur des cas, vous allez vous retrouver avec une chaîne comme "200.32 1000200.32". Je voudrais vérifier le M, le décoller, lancer la chaîne à numéroter, puis ajouter/multiplier la valeur appropriée. Comme ça ...

var str = "200.32 M"; 
var tokenM = " M"; 
var num; 

if(str.indexOf(tokenM) == (str.length - tokenM.length)) { // Ends with " M"? 
    str = str.replace(new RegExp(tokenM), ""); 
    num = parseFloat(str) + 1000000; 
} 
0
var s= "200.32 M" ; 

var rx=/((\.\d+)|(\d+(\.\d+)?))\s*([MB])?/; 
var P= rx.exec(s), value, x, 
mult={M:1000000,B:1000000000,O:1}; 

if(P){ 
    value= P[1]; 
    x=P[5] || O; 
    value*=mult[x]; 
} 
alert(value) 

/* valeur retournée: (Nombre) */