2013-08-22 19 views
1

我一直在調試我的JavaScript代碼兩天,現在我發現它可以在Firefox中使用。爲什麼sort()JavaScript函數可以在Firefox中使用,但不能在Chromium中使用?

我將代碼上傳到jsFiddle,因此您可以測試它there

它適用於Firefox v23,但它不能在Chromium v​​28.0.1500.71中排序。我正在使用jQuery v1.10.1

我不知道錯誤是在sort()函數還是在jQuery庫中。

這是否應該報告爲鉻中的錯誤?

var data = { 
    "list": [ 
     { 
      "title": "a", 
      "date": "03/08/2010" 
     }, 
     { 
      "title": "b", 
      "date": "31/07/2010", 
     }, 
     { 
      "title": "c", 
      "date": "08/08/2010", 
     }, 
     { 
      "title": "d", 
      "date": "01/08/2010" 
     }, 
     { 
      "title": "e", 
      "date": "11/12/2010" 
     }, 
     { 
      "title": "f", 
      "date": "10/12/2010" 
     }, 
     { 
      "title": "g", 
      "date": "12/12/2010" 
     }, 
     { 
      "title": "h", 
      "date": "14/12/2010" 
     }, 
     { 
      "title": "i", 
      "date": "11/12/2010" 
     }, 
     { 
      "title": "j", 
      "date": "05/08/2010" 
     }, 
     { 
      "title": "k", 
      "date": "03/08/2010" 
     } 
    ] 
}; 
// Sort 
$.each(data, function (key, val) { 
    val.sort(function(a, b) { 
     return a.title.toLowerCase() > b.title.toLowerCase(); 
    }); 
    // The object is not sorted here 
}); 
// Print 
document.querySelector("pre").textContent = 
    JSON.stringify(data, null, 4); 

回答

1

嘗試這樣的:

$.each(data, function (key, val) { 
    val.sort(function(a, b) { 
     return a.title.toLowerCase().localeCompare(b.title.toLowerCase()); 
    }); 
}); 

$("pre").text(JSON.stringify(data, null, 4)); 

FIDDLE

localeCompare返回指示一個引用字符串是否之前或之後配或相同的排序順序給定的字符串,換句話說一些它返回-1,1或0,而將字符串與<>進行比較則返回true或false,這不是sort()預期的結果。

+0

您修復了代碼,但沒有解釋。 – kstev

3

您的sort比較是壞了。

sort回調期望返回一個負數,0或一個正數,這取決於第一個參數是小於,等於還是大於第二個參數。

你總是返回一個布爾值,這不是它應該做的。

+0

爲什麼這可以在Firefox中工作? – Lucio

+0

這可能只是他們實現它的方式。也許Firefox會將False解釋爲0,並將True解釋爲1,而Chromium不會自動將它們的布爾值轉換爲整數值,這將允許排序在Firefox中工作 - 我不確定,這只是我的最佳猜測。 – kstev

相關問題