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