繁体   English   中英

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

[英]Javascript - Issue with sort function on Opera 11.60 and IE 8

我试图按那里的属性对对象进行排序。 我在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); 

您应该获得如下正确的结果:

[“个人规划”,“其他”,“其他”,“总体表现”,“交付/时间”,“态度”,“态度”]

  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); 

我的结果是:

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

注意第一个,第二个和第三个值吗?

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

有任何想法吗?

提前致谢。

编辑:和与IE部分:

码:

 var DataArray=['Other','Attitude','Attitude','Delivery/timings','General    Performance','Personal Planning','Other'];

 DataArray=DataArray.sort(function(a,b)
{
     return a<b;
 });

prompt('',DataArray);

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

码:

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

这对于任何特定的浏览器而言都不是问题,而对于未阅读.sort()函数文档的情况而言 ,则是一个问题。 您传递给.sort()的回调不应该返回布尔值,而应该返回一个数字:

  • 如果a在b之前,则为负
  • 如果a等于b,则为0
  • 如果a在b之后,则为正

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

  • < 0如果a > b
  • > 0如果a < b
  • 如果a == b == 0

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

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

这是一个工作示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM