简体   繁体   English

无法在Javascript中将数组按升序排列

[英]Cannot sort array into ascending numeric order in Javascript

I'm trying to sort an array shown below using the .sort() method in JavaScript. 我正在尝试使用JavaScript中的.sort()方法对下面显示的数组进行排序。

var addresses = [
    "5 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan",     
    "51 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "53 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "55 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "57 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "7 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "9 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan"
];

However, after the .sort method has been invoked and I write the array to the document. 但是,在调用.sort方法并将数组写入文档之后。 The array doesn't seem to change into ascending numeric order. 该数组似乎并没有变成升序的数字顺序。

Can anyone see where I'm going wrong? 谁能看到我要去哪里错了?

Your array contains strings, so they'll be sorted alphabetically instead of numerically. 您的数组包含字符串,因此它们将按字母顺序而不是数字排序。 You'll want to use a sorting function as the parameter of array.sort and parse out the house number. 您需要将排序功能用作array.sort的参数,并解析出门牌号。

Got it working in the end with the following code shown below: 最后使用下面的代码使它工作:

function naturalCompare(a, b) {
    var ax = [], bx = [];

    a.replace(/(\d+)|(\D+)/g, function(_, $1, $2) { ax.push([$1 || Infinity, $2 || ""]) });
    b.replace(/(\d+)|(\D+)/g, function(_, $1, $2) { bx.push([$1 || Infinity, $2 || ""]) });

    while(ax.length && bx.length) {
        var an = ax.shift();
        var bn = bx.shift();
        var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
        if(nn) return nn;
    }

    return ax.length - bx.length;
}

addresses = addresses.sort(naturalCompare);

You could use this sort function that compare the first numbers of the strings 您可以使用此排序功能比较字符串的前几个数字

 var addresses = [ "5 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", "51 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", "53 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", "55 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", "57 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", "7 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", "9 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan" ]; addresses.sort(function(a, b){ return +a.split(" ")[0] - +b.split(" ")[0]; }); console.log(addresses); 

check below example 检查下面的例子

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a-b});

http://www.w3schools.com/jsref/jsref_sort.asp http://www.w3schools.com/jsref/jsref_sort.asp

try this 尝试这个

 var addresses = [ "5 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", "51 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", "53 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", "55 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", "57 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", "7 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", "9 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan" ]; addresses.sort(function(a, b){ return a.split(' ')[0] - b.split(' ')[0] }) 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM