2016-01-07 65 views
2

我有這個功能可以將這些電話號碼從最大號碼排序到最小號碼。當我刪除數字中的破折號時,它工作正常,但我應該使它與包含的破折號一起工作。所以我的問題是,是否可以讓我的函數忽略數字中的破折號?如何對包含破折號的數字數組進行排序? (僅限JavaScript)

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

只需更換'-'排序函數內部它不會在數組 – Blindman67

+0

'的console.log影響的人數([914-954-1298 ,'914-954-1297,954-914-1299]);' – epascarello

+1

那麼......首先,這些破折號被解釋爲減號(減法),所以你的電話號碼只是常數,而不是數字串。 –

回答

4

您可以保留電話號碼中的標點符號,但在排序時忽略它。只需更改比較函數organize,將字符串的數字的精簡版本進行比較。 (你可以使用parseInt()那些字符串轉換爲數字,如果你想。)

其他標點符號可以通過改變正則表達式剝離典型的撥號標點符號支持:

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

或者作爲pherris建議,刪除所有非-digits有:

.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>

+0

這個正則表達式可能更好 - 只需要替換所有非數字:'「123 asdf234」.replace(/ \ D/g,'');' – pherris

+0

Thanks,@pherris,updated。 – Mogsdad

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

該代碼不能正確排序數字。組織函數將爲任何一對字符串返回NaN,因爲它們不能被強制轉換爲數字。 –

相關問題