array.sort()没有给出所需的结果

时间:2009-12-04 05:16:30

标签: javascript function sorting

我在我的javascript代码中使用以下功能

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

这是我的数组对象中的数据。现在我希望如果用户点击1个月,那么整个数据应该排序1个月,如果用户点击3年,那么整个数据应该根据等等。 现在记住我的代码出错的地方?????

2 个答案:

答案 0 :(得分:3)

实际上你的排序方法是在词法上对值进行排序。使用callbackFunction以数字方式对其进行排序 以下代码将按您的预期对数组进行排序。

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

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

答案 1 :(得分:1)

这些数字还是字符串?将它们转换为数字。