如何对包含破折号的数值数组进行排序? (仅限JavaScript)

时间:2016-01-07 02:48:34

标签: javascript sorting

我有这个功能可以将这些电话号码从最大数量到最小数量进行排序。当我删除数字中的破折号时,它工作正常,但我应该使它包含破折号。所以我的问题是,是否可以让我的函数忽略数字中的破折号?

var numberSorter=function(phoneNumbers){var organize=function(a, b){return b-a};
return phoneNumbers.sort(organize);}

var myNumbers=[914-954-1298, 914-954-1297, 954-914-1299]

console.log(numberSorter(myNumbers));

3 个答案:

答案 0 :(得分:4)

您可以在电话号码中保留标点符号,但在排序时忽略它。只需更改比较函数organize,即可将数字的剥离版本作为字符串进行比较。 (如果需要,可以使用parseInt()将这些字符串转换为数字。)

通过更改RegExp以删除典型的拨号标点符号,可以支持其他标点符号:

.replace(/[,()-]/g,"")

或者如pherris建议的那样,删除所有非数字:

.replace(/\D/g, '');

您可以运行此代码段:

var numberSorter=function(phoneNumbers){
  var organize=function(a, b){return a.replace(/-/g,"").localeCompare(b.replace(/-/g,""))};

  return phoneNumbers.sort(organize);
}

var myNumbers=['914-954-1298', '914-954-1297', '954-914-1299']

snippet.log(numberSorter(myNumbers));
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

答案 1 :(得分:0)

Mogsdad 答案的现代版本:

const numberSorterES6 = (phoneNumbers) => {
  return phoneNumbers.sort((a, b) => a.replace(/-/g, "") - b.replace(/-/g, ""));
}

const myNumbers=['914-954-1298', '914-954-1297', '954-914-1299']

console.log(numberSorterES6(myNumbers));

它只是用 .replace(/-/g, "") 删除破折号,因此它可以像普通数字一样对它们进行排序。如果您想降序而不是升序,请将排序函数中的 - 更改为 +

答案 2 :(得分:-1)

字符串就是答案:

var numberSorter = function(phoneNumbers) {
    var organize = function(a, b) {
        return b - a
    };
    return phoneNumbers.sort(organize);
}

var myNumbers = [
    '914-954-1298',
    '914-954-1297',
    '954-914-1299'
]

console.log(numberSorter(myNumbers));