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

标签 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 mnth,则整个数据应按 1 mnth 排序,如果用户单击 3 年,则整个数据应根据那个等等。 现在请记住我的代码哪里出了问题??????

最佳答案

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

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

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

关于javascript - array.sort() 没有给出所需的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1845001/

相关文章:

javascript - Web Audio API,设置高音和低音

javascript - Browserify Babel ES2015 Knockout 相互依赖模块

类中的 PHP 调用函数 - 有更简单的方法吗?

C初学者题: Pointer to a pointer/Can't access values from outside a function

Android : Sort Array list of Strings containing paths of all the . 手机上的jpg文件

javascript - 如何使用 Javascript(在可编辑的 div 中)在新添加的空范围内设置光标?

javascript - 在 Angular Meteor 中使用 Blaze 模板

javascript - 在 Javascript 中获取原始函数

javascript - 将并行数组组合成单个对象数组并排序

xml - 将 Excel 电子表格导出到 XML 并在导出期间或之后按字母顺序对数组进行排序?