Javascript - Opera 11.60和IE 8上的排序功能问题

时间:2012-01-07 12:57:08

标签: javascript internet-explorer sorting opera

我正在尝试按属性对对象进行排序。我的功能在Opera和IE上有问题。直到现在,我已经在这个阶段调试了Opera的问题:

  1. 打开“Opera浏览器”并按cntr + shift + i。选择控制台。
  2. 在控制台中传递此代码,然后按shift + enter。

    var DataArray=["Other","Attitude","Attitude","Delivery/timings","General   Performance","Personal Planning","Other"]
    DataArray=DataArray.sort(function(a,b)
    {
        return a<b;
     });
    
    JSON.stringify(DataArray);
    
  3. 你应该得到这样的正确结果:

      
        

    [“个人计划”,“其他”,“其他”,“一般表现”,“交付/时间”,“态度”,“态度”]

      
    1. 现在以这种方式改变排序功能a> b,然后按Enter + shift来执行它。

      var DataArray=["Other","Attitude","Attitude","Delivery/timings","General   Performance","Personal Planning","Other"]
      DataArray=DataArray.sort(function(a,b)
      {
          return a>b;
      });
      JSON.stringify(DataArray);
      
    2. 我的结果是:

        
          

      [“Attitude”,“Delivery / timing”,“Attitude”,“General Performance”,“Other”,“Other”,“Personal Planning”]

        

      注意第一个,第二个和第三个值?发生了什么?

      如果您在控制台“Attitude”=“Attitude”中执行此操作,则返回true ...

      有什么想法吗?

      提前致谢。

      编辑: 与IE的部分:

      CODE:

       var DataArray=['Other','Attitude','Attitude','Delivery/timings','General    Performance','Personal Planning','Other'];
      
       DataArray=DataArray.sort(function(a,b)
      {
           return a<b;
       });
      
      prompt('',DataArray);
      

      结果(正确):个人计划,其他,其他,一般表现,态度,态度,交付/时间

      CODE:

      var DataArray = ['其他','态度','态度','交付/时间','一般表现','个人计划','其他'];

          DataArray=DataArray.sort(function(a,b)
          {
              return a>b;
          });
      
          prompt('',DataArray);
      

      结果(不正确):态度,态度,其他,交付/时间,一般表现,其他,个人计划

      解决方案:

      sortableArray=sortableArray.sort(function(a,b)
                      {
                          if(a.Category>b.Category)
                          {
                              return 1;
                          }
      
                          if(a.Category<b.Category)
                          {
                              return -1;
                          }
      
                          return 0;
      
                      });
      

      要按降序排序数据,请使用reverse()函数。

      感谢您的帮助。特别是@nnnnnn

2 个答案:

答案 0 :(得分:5)

这不是任何特定浏览器的问题,没有阅读.sort() function documentation是一个问题。你传递给.sort()的回调不应该返回一个布尔值,它应该返回一个数字:

    如果a来自b ,则
  • 否定
  • 0如果a等于b
  • 如果a来自b ,则
  • 为正

答案 1 :(得分:4)

您的排序函数返回一个布尔值,而它应该返回一个整数。虽然1可能会被true0混淆为false,但这不应该是您依赖代码逻辑的东西。该函数应该有3个返回案例:

  • < 0 if a > b
  • > 0 if a < b
  • == 0 if a == b

所以你应该像这样对数组进行排序:

  DataArray = DataArray.sort(function(a,b){
      return a>b ? 1 : a<b ? -1 : 0;          
  });

这里是working demo