Настраиваемый парсер TableSorter - PullRequest
0 голосов
/ 16 марта 2011

Я пытаюсь отсортировать такие значения, как «200,32 М» или «800.80 В»

Используемый мной метод не работает.Кто-нибудь знаком с этим?

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

Ответы [ 3 ]

0 голосов
/ 16 марта 2011

Я уверен, s.replace(/M/,s+1000000) не будет делать то, что вы ожидаете. В лучшем случае вы получите строку типа «200.32 1000200.32». Я бы проверил на M, убрал бы его, бросил строку в число, а затем добавил / умножил соответствующее значение. Вот так ...

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 голосов
/ 16 марта 2011
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)

/ * возвращаемое значение: (число) 200320000 * /

0 голосов
/ 16 марта 2011

s.replace(/M/,s+1000000) выглядит странно.
попробуйте это вместо M (и то же самое для B и т. д.)

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
...