在Javascript中对地址数组进行排序

时间:2016-04-26 08:57:18

标签: javascript arrays sorting

我想对一组地址进行排序。通过在我的数组上使用.sort()方法看起来很简单。

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

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

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

3 个答案:

答案 0 :(得分:3)

您可以为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));

答案 1 :(得分:2)

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

  

arr.sort([的compareFunction])

     

<强>的compareFunction(可选)即可。指定定义排序顺序的函数。如果省略,则根据每个数组对数组进行排序   根据字符串,字符的Unicode代码点值   转换每个元素。

有关详细信息,请参阅Mozilla Developer Network

答案 2 :(得分:0)

这是.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
});