2009-12-04 24 views
0

IAM使用以下在我的JavaScript代碼功能的Array.sort()是不給所期望的結果

function AlphaSort(sort_type,cat_1,cat_2,cat_nm) 
{ 
var len = dataref.totalrow; 
var arr_name = new Array(); 

for (var i =0; i<len; i++) 
{ 
    var t = eval('dataref.mf_scheme['+i+'].'+sort_type); 
    arr_name[i] = t; 
} 

arr_name.sort(); 
if(sort_type!='scheme_name') 
{ 
    arr_name.reverse(); 
} 
var j=0; 
for (var i =0; i<arr_name.length; i++) 
{ 
    var sort_key = arr_name[i]; 

    for (j=i; j < arr_name.length; j++) 
    { 
    var next_sort_key = eval('dataref.mf_scheme['+j+'].'+sort_type); 
    next_sort_key = next_sort_key; 
    if (sort_key == next_sort_key) 
    { 
    break; 
    } 
    } 

    if (i != j) 
    { 
    var temp = eval('dataref.mf_scheme['+i+']'); 
    eval('dataref.mf_scheme['+i+'] = dataref.mf_scheme['+j+']'); 
    eval('dataref.mf_scheme['+j+'] = temp'); 
    } 
} 

var s = ''; 

for (var i =0; i<len; i++) 
{ 

    s += eval('dataref.mf_scheme['+i+'].'+sort_type)+','; 
} 
if((cat_1 != '') && (cat_2 != '') && (cat_nm != '')) 
{ 
    showUser(cat_1,cat_2,cat_nm); 
} 
else 
{ 
    showUser('1','1','all'); 
} 
} 

其中showUser僅打印導致陣列

function showUser(cats1,cats2,nam_cat) 
{ 

if((nam_cat=='all') && (cats1 !=1) && (cats2 !=1)) 
{ 
    document.getElementById("all").style.display=''; 
    document.getElementById("eq").style.display='none'; 
} 
else 
{ 
    var len = dataref.totalrow; 
    var sc_nms = ''; 
    for (var i =0; i<len; i++) 
    { 
    var scm_id = eval('dataref.mf_scheme['+i+'].cat_id'); 
    var scm_mnths=''; 
    if((scm_id==cats1) || (scm_id==cats2) || (cats1==1) || (cats2==1)) 
    { 
    var scm_name = eval('dataref.mf_scheme['+i+'].scheme_name'); 
    var scm_1mnth = eval('dataref.mf_scheme['+i+'].scheme_1_month'); 
    var arrs=new Array(scm_1mnth,scm_3mnth,scm_6mnth,scm_1yr,scm_3yr,scm_5yr,incept,navss); 
    for (var j =0; j<arrs.length; j++) 
    { 
    var vals=arrs[j]; 
    scm_mnths +='<TD class="c3">'+vals+'</TD>'; 

    } 
    sc_nms +='<TR class="ln hv"><TD class="l">'+scm_name+'</td>'+scm_mnths+'</tr>'; 
    } 
    } 
    document.getElementById("eq").style.display=''; 
    document.getElementById('eq').innerHTML = '<TABLE cellpadding="3" class="b bc r w4">'+sc_nms+'</Table>'; 
    document.getElementById("all").style.display='none'; 
} 
} 

這裏arr_name.sort() ;被排序的功能,但我的輸出是不正確的

輸出它給是這樣的:

90.45 
9.90 
81.89 
49.67 
43.59 
202.99 
18.10 
165.46 
111.17 

這是不對的。它只是在第一個整數的基礎上排序而不是整數。

正確的輸出將是: -

202.99 
165.46 
111.17 
90.45 
81.89 
49.67 
43.59 
18.10 
9.90 

我應該使用什麼功能,什麼是我現有的代碼問題?????

編輯:

all Schemes  1 mth 3 mth 6 mth 1 yr 3 yr 5 yr  
ICICI   -4.62 6.68 43.05 80.82 5.84 24.26 
Prudential  6.68 345.89 234.76 21.89 -10.23 9.90 

這是在我的陣列來的數據object.Now我想,如果用戶點擊1個mnth那麼整個數據應該進行排序1個mnth明智的,如果用戶點擊3年,那麼整個數據應該按照那個排序等等。 現在要記住這個問題,我的代碼出錯了嗎?

回答

3

實際上你的排序方法是按詞彙排序值。使用callbackFunction對其進行數字排序。
以下代碼將按照您的期望對您的數組進行排序。

arr_name.sort(callbackFunc); // use callbackFunc wherever you are sorting 

function callbackFunc(a, b){ 
    return parseFloat(a) - parseFloat(b); 
} 
+0

和有人downvoted這以及:) – 2009-12-04 07:40:10

1

這些數字或字符串?將它們轉換爲數字。

+0

發佈的行爲清楚地顯示值被視爲字符串。 – yoda 2009-12-04 05:22:52

+0

請參閱IAM漂亮的JavaScript新手,請你具體告訴我IAM會出錯哪裏? 我的數據可以在一個數組中有任何字母,然後在另一個整數中。我必須對所有這些進行排序。如何糾正我的代碼????? plz help – developer 2009-12-04 05:26:52

+0

@developer - 在你的例子中,這些對象是字符串,並且按字母順序排序,輸出是正確的。如果你想讓它們按數字排序,它們必須是數組中的數字,所以你需要知道並轉換它們。 – Knio 2009-12-04 05:29:55