2013-09-22 52 views
0

我用JavaScript編寫了一個程序,它收集用戶的輸入並按字母順序排序或按字母數字排序。它使用一個數組並對該數組進行排序,但JavaScript只會按數字或單詞中的第一個字符進行排序。因此,如果輸入了22,1和3,則會按1,22,3排序,因爲按第一個字符排序。言辭也一樣。我怎麼能通過這個?如果你認爲我的代碼可以幫助你告訴我如何,在這裏你去。JavaScript - 僅對第一個字母進行排序的數組/僅第一個數字

var input = null; 
var words = new Array(); 

function startApp() 
{ 
    alert("Welcome to Word/Number Sorter 1.0"); 
    alert("Enter one word/number at a time in the next prompts. Enter passw0rd to finish/stop."); 

    do { 

     input = prompt("Enter word...enter passw0rd to exit."); 
     if (input != "passw0rd"){ 
      words.push(input); 
     } 
     else{ 
      break; 
     } 
    }while(input != "passw0rd"); 

    var newW = words.sort(); 

    for (var i = 0; i < newW.length; i++) 
    { 
     document.writeln(newW[i], "<br>"); 
    } 
} 
+0

[自然排序的可能重複文本和數字,JavaScript](http://stackoverflow.com/questions/2802341/natural-sort-of-text-and-numbers-javascript) –

回答

1

排序數字,你需要一個特殊的排序回調:

[22,1,3].sort(function(a, b) { return a - b }) 
> [1, 3, 22] 

如果你想「自然排序」,它是這樣的:

function natcmp(a, b) { 
    var ra = a.match(/\D+|\d+/g); 
    var rb = b.match(/\D+|\d+/g); 
    var r = 0; 

    while(!r && ra.length && rb.length) { 
     var x = ra.shift(), y = rb.shift(), 
      nx = parseInt(x), ny = parseInt(y); 

     if(isNaN(nx) || isNaN(ny)) 
      r = x > y ? 1 : (x < y ? -1 : 0); 
     else 
      r = nx - ny; 
    } 
    return r || ra.length - rb.length; 
} 

ls = ['img35', 'img1', 'img2', 'img22', 'img3', 'img2.gif', 'foobar'] 
console.log(ls.sort(natcmp)) 

> ["foobar","img1","img2","img2.gif","img3","img22","img35"] 
+0

謝謝,但那麼我將如何解決這個詞排序? – freemann098

+0

更新。,...... – georg

相關問題