在Javascript中不能将数组按升序排序

Cannot sort array into ascending numeric order in Javascript

本文关键字:升序 排序 数组 Javascript 不能      更新时间:2023-09-26

我试图在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"
];

但是,在调用.sort方法并将数组写入文档之后。数组似乎没有变成升序的数字顺序。

有人能看出我错在哪里吗?

您的数组包含字符串,因此它们将按字母顺序排序,而不是按数字排序。您将需要使用排序函数作为数组的参数。排序并解析门牌号

最后使用下面的代码使其工作:

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);

您可以使用这个排序函数来比较字符串的前几个数字

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);

检查下面的示例

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a-b});
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]
})