JavaScript-数组仅排序第一个字母/仅排序第一个数字

JavaScript-数组仅排序第一个字母/仅排序第一个数字,javascript,arrays,sorting,Javascript,Arrays,Sorting,我用JavaScript编写了一个程序,它收集用户的输入并按字母顺序或数字字母顺序排序。它使用数组并对数组进行排序,但JavaScript仅按数字或单词中的第一个字符对其进行排序。因此,如果输入了22、1和3,它将按1、22、3进行排序,因为它是按第一个字符排序的。词语也是如此。我怎样才能度过这一关?如果你认为我的代码能帮你告诉我怎么做,给你 var input = null; var words = new Array(); function startApp() { alert("

我用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>");
    }
}
var输入=null;
var words=新数组();
函数startApp()
{
警报(“欢迎使用单词/数字分拣机1.0”);
警报(“在下一个提示中一次输入一个单词/数字。输入passw0rd以完成/停止”);
做{
输入=提示(“输入单词…输入密码以退出”);
如果(输入!=“passw0rd”){
推送(输入);
}
否则{
打破
}
}while(输入!=“passw0rd”);
var newW=words.sort();
对于(变量i=0;i”;
}
}

要进行数字排序,您需要一个特殊的排序回调:

[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"]
函数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[“foobar”、“img1”、“img2”、“img2.gif”、“img3”、“img22”、“img35”]

Thank you的可能重复项,但如何修复单词排序?