[英]JavaScript - Array sorting only first letter/Only first number
我用JavaScript編寫了一個程序,該程序收集用戶的輸入並按字母順序或數字字母順序對其進行排序。 它使用一個數組並對數組進行排序,但是JavaScript僅按數字或單詞中的第一個字符對其進行排序。 因此,如果輸入了22、1、3,則由於按第一個字符進行排序,因此將按1,22,3對其進行排序。 單詞也一樣。 我將如何克服? 如果您認為我的代碼可以幫助您告訴我如何操作,那么請繼續。
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>");
}
}
要進行數字排序,您需要一個特殊的排序回調:
[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"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.