![](/img/trans.png)
[英]Sorting an Array using .sort in an function equals Undefined in JavaScript
[英]Sorting javascript array using function 'sort"
我正在嘗試對一個javascript數組進行排序,該數組包含任何類型的數據,例如數字,字符串,日期,時間等。我的邏輯適用於除數字以外的所有數據類型。 它正在考慮數字作為字符串。
例如,我有一個如下數組:
array = ["1","2","12","22","33","3"]
我期望排序后的數組將是1,2,3,12,22,33…
但是它給出了: 1,12,2,22,3,33…
任何人都可以完善我的代碼,該代碼必須適用於任何類型的數據類型。
這是我的排序代碼:
function sortTable(a,b){
if(sortMode=="A"){
if(a[1]>b[1]) return 1;
if(a[1]<b[1]) return -1;
}
else if( sortMode=="D"){
if(a[1]>b[1]) return -1;
if(a[1]<b[1]) return 1;
}
return 0;
}
array.sort(sortTable);
注意:我無法預測數組中將包含哪種數據類型……因此排序功能必須是通用的。 意思是,我不能為不同的數據類型調用不同的排序技術函數……請確保排序函數應適用於所有數據類型。
無法獲得期望的輸出的原因是,當兩個操作數均為字符串類型時,會在它們之間進行字母比較。 它們不會自動轉換為數字。
"2" > "12" // result is true
如果操作數之一是數字,則比較運算符會將另一個操作數從字符串轉換為數字。
"2" > 12 // result is false
要指出的另一件事是,對於數字數組,您正在嘗試訪問索引為1的數組元素。
if(a[1]>b[1]) return 1;
應該是:
if( a > b ) return 1;
我將分別處理每個數據類型,而不是編寫這樣的泛型函數。
我寫了幾個正則表達式條件來檢查某些數據結構。 (您總是可以根據'typeof(a)'或'typeof(b)'做出分支的大型switch語句。)這些檢查確定是否應將字符串內的值解釋為字符串以外的其他值。
function sortVals(a,b){
//other code here
var aT=a+"", bT=b+""; //a and b as strings
if(!aT.match(/[^0-9]/) && !bT.match(/[^0-9]/)){//no non-numbers were found
a = parseInt(aT, 10);
b = parseInt(bT, 10);
if(a!=b)
return a<b?1:-1; //returns 1 if a<b; -1 if a>b
}else if(!aT.match(/[^0-9\.]|\..*\./) && !bT.match(/[^0-9\.]|\..*\./)){//only valid floats were found
a = parseFloat(aT);
b = parseFloat(bT);
if(a!=b)
return a<b?1:-1;
}
}
我不知道這是否是您想要的一部分,但是如果您想為任何數據類型使用排序功能,則需要在其中進行一些工作。 祝好運!
如前所述,您需要確定數據類型。 但是這是一個,您可以將其用於字符串/整數。
var sortMethod = function(x,y){
var a = x|0 ,
b = y|0;
return (a>b) ? 1 : -1;
});
var x = ["1", "34" , "3" , "12"].sort(sortMethod);
var y = [3,52,123,1].sort(sortMethod);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.