2014-02-18 49 views
0

排序的字母數字元素這是我的數組:解析和基於十進制子

var arr=["Iteration 3.1","Iteration 3.2","Iteration 2.2","Iteration 2.3","Iteration 2.1"]; 

預期成果是:

Iteration 3.2 
Iteration 3.1 
Iteration 2.3 
Iteration 2.2 
Iteration 2.1 

我嘗試:

arr.sort(function(a,b){ 
a=a.match(/[^a-zA-Z]/); 
b=b.match(/[^a-zA-Z]/); 
var an=parseFloat(a,10); 
var bn=parseFloat(b,10); 
return an<bn?1:(an>bn?-1:(a<b?-1:(a>b?1:0))); 
}); 

我目前得到:

Iteration 3.1 
Iteration 3.2 
Iteration 2.2 
Iteration 2.3 
Iteration 2.1 

jsfiddle link

+1

整數和小數部分嘗試改變表達式爲:/ [^ a-zA-Z] /(即增加一個空格)。 parseInt不喜歡空格。此外,使用parseFloat,因爲parseInt會刪除句點和小數。 –

+0

試過了,不起作用 –

回答

1

要匹配人物 - 你的正則表達式只匹配一個字符(使用一個類,其中包括比數字多的人不想要的字符)。從這裏/[-+]?[0-9]*\.?[0-9]+/

0
numeric = new Array(); 
function numOrdDesc(a, b){ return (b-a); } 
var arr=["Iteration 3.1","Iteration 3.2","Iteration 2.2","Iteration 2.3","Iteration 2.1", "Iteration 10.1"]; 

for (i=0;i<arr.length;i++) { 

numeric.push(parseFloat(arr[i].replace('Iteration ',''))); 

} 

console.log(numeric.sort(numOrdDesc)); 

http://jsfiddle.net/xuXGv/1/

幫助:試試這個正則表達式(其匹配任何全部或小數點的數字),而不是http://javascript.about.com/library/blsort.htm。附: 「迭代」字符串可以輕鬆添加... :)

+1

作爲一種字符排序而不是數字排序,在「迭代10.1」中出現分歧。 –

+0

是的,好的,儘快更新。 :) – sinisake

1

這個工作對我來說:

var arr=["Iteration 3.1","Iteration 3.2","Iteration 2.2","Iteration 2.3","Iteration 2.1"]; 
arr.sort(function(a,b){ 
    a=a.split(" "); 
    b=b.split(" "); 
    var an=parseFloat(a[1],10); 
    var bn=parseFloat(b[1],10); 
    return an<bn?1:-1; 
}); 
0

可以匹配的每個商品

var arr=["Iteration 3.1","Iteration 3.2","Iteration 2.2", 
"Iteration 2.3","Iteration 2.1"]; 

arr.sort(function(a, b){ 
    var a1= a.match(/\d+(\.\d+)?/), 
    b1= b.match(/\d+(\.\d+)?/); 
    return b1[0]-a1[0]; 
}); 


/* returned value: (Array) 
Iteration 3.2, Iteration 3.1, Iteration 2.3, Iteration 2.2, Iteration 2.1 
*/