簡體   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