2012-08-13 257 views
1

這裏我使用javascript.But它排序字符串alone.What我需要的是從字符串分割的數值和排序字母數字字符串值的數值values.Here是我的代碼如何對字母數字字符串值進行排序?

function sortUnorderedList(ul, sortDescending) { 
     if (typeof ul == "string") 
      ul = document.getElementById(ul); 

     var lis = ul.getElementsByTagName("li"); 
     var vals = []; 
     for (var i = 0, l = lis.length; i < l; i++) 
      vals.push(lis[i].innerHTML); 

     vals.sort(); 

     if (sortDescending) 
      vals.reverse(); 

     for (var i = 0, l = lis.length; i < l; i++) 
      lis[i].innerHTML = vals[i]; 
    } 

任何建議?

編輯:當前結果

PPG 101 
PPG 102 
PPG 57 
PPG 58 
PPG 99 

預期結果:

PPG 57 
PPG 58 
PPG 99 
PPG 101 
PPG 102 
+0

請提供示例HTML,以便我們可以看到您要完成的工作。您是否嘗試對LI標籤列表中的數字進行排序,同時忽略HTML中的所有非數字? – jfriend00 2012-08-13 08:53:34

+0

@ jfriend00:沒有第一我需要排序後的字母排序數字 – bala3569 2012-08-13 08:58:03

+0

http://stackoverflow.com/questions/4340227/sort-mixed-alpha-numeric-array – ArtBIT 2012-08-13 09:04:11

回答

2

要執行數字排序,則必須調用sort方法時傳遞一個函數作爲參數。

vals.sort(function(a, b) { 
    return (a-b); 
}); 

更多細節

+0

我沒有看到數字前的字符串,使用更完整的Mitch Satchwell功能波紋管(這是相同的想法)。 – 2012-08-13 09:14:19

1

http://www.javascriptkit.com/javatutors/arraysort.shtml如果你想通過字符串第一個排序,然後按空格之後的數值,你需要指定自己的功能,在傳遞給sort函數,如下所示:

arr.sort(function(a,b) { 
    a = a.split(' '); 
    b = b.split(' '); 
    if (a[0] == b[0]) { 
    return parseInt(a[1]) - parseInt(b[1]); 
    } 
    return a[0] > b[0]; 
}); 

上面的示例首先按字符串排序,然後按字符串(數字)排序。上面的代碼適用於假定被排序的值將始終採用上述格式,並且缺少對輸入的任何檢查。

+0

第一次點擊它工作正常......但第二次點擊顯示錯誤Microsoft JScript運行時錯誤:'0'爲空或不是對象 – bala3569 2012-08-13 10:23:17

+0

你能提供一個jsfiddle嗎? – 2012-08-13 11:22:28

相關問題