在Javascript中对地址数组进行排序[重复]

Posted

技术标签:

【中文标题】在Javascript中对地址数组进行排序[重复]【英文标题】:Sort array of addresses in Javascript [duplicate] 【发布时间】:2016-08-19 23:49:16 【问题描述】:

我想对地址数组进行排序。在我的数组上使用.sort() 方法似乎很简单。

但是…… 试试看这里:https://jsfiddle.net/ytuzr918/

.sort() 方法完全按字母顺序排序(至少我认为是这样)。但是我的地址有数字,数字后面还有更多的字母。

那么有没有办法对数组“正确”排序,可能是通过对排序方法进行原型设计?

【问题讨论】:

【参考方案1】:

您可以给Array.prototype.sort()提供比较功能。

改编自here的答案:

var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;
function sortAlphaNum(a,b) 
    var aA = a.replace(reA, "");
    var bA = b.replace(reA, "");
    if(aA === bA) 
        var aN = parseInt(a.replace(reN, ""), 10);
        var bN = parseInt(b.replace(reN, ""), 10);
        return aN === bN ? 0 : aN > bN ? 1 : -1;
     else 
        return aA > bA ? 1 : -1;
    

console.log(addresses.sort(sortAlphanum));

【讨论】:

【参考方案2】:

javascript 中的数组排序方法采用一个可选参数,即比较函数。您可以根据需要定义此比较功能。

arr.sort([compareFunction])

compareFunction(可选)。指定定义排序顺序的函数。如果省略,则数组根据每个排序 字符的 Unicode 码位值,根据字符串 每个元素的转换。

更多详情请见Mozilla Developer Network。

【讨论】:

【参考方案3】:

这是.sort() 函数的常见排序方式。您可以做的是将您自己的自定义比较函数传递给该方法,以便它使用它来确定排序顺序。

addresses.sort(function (a, b) 
  var val_a = Number.parseInt(a.replace('Nordmarksvej ', ''));
  var val_b = Number.parseInt(b.replace('Nordmarksvej ', ''));

  if (val_a === val_b) 
    return 0;
  

  return val_a > val_b ? 1 : -1
);

【讨论】:

以上是关于在Javascript中对地址数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何对数字的javascript数组进行排序[重复]

在Python中对关联数组进行排序[重复]

如何在javascript中对多维数组进行排序

如何在 PHP 中对多维数组进行排序 [重复]

在javascript中对混合服装尺寸的数组进行排序

如何在javascript中对嵌套的对象数组进行排序?