2016-09-07 150 views
0

我有一個非常簡單的排序功能,通過index排序對象:排序功能在IE瀏覽器不工作11

panoramas.sort((a, b) => { 
    if (a.index > b.index) return 1 
}) 

輸入:

[ 
    { index: 0 }, 
    { index: 2 }, 
    { index: 1 } 
] 

輸出:

[ 
    { index: 1 }, 
    { index: 2 }, 
    { index: 3 } 
] 

功能適用於Chrome和Firefox,但不適用於IE(陣列根本沒有分類)

我的功能有問題嗎?

+0

我想* *它不排序,因爲你的函數的情況下'沒有明確的返回值a.index <= b.index'。 –

+0

@MartinNyolt我應該如何更改代碼以反映這一點? – alex

+0

請參閱[此答案](http://stackoverflow.com/a/24080786/1314743)。 –

回答

2

對於排序,排序函數應該返回-1,0或1。

// Your function tests for 'a.index > b.index' 
// but it's missing the other cases, returning false (or 0) 

panoramas.sort((a, b) => { 
    if (a.index > b.index) return 1; 
    if (a.index < b.index) return -1; 
    return 0; 
}) 

Sorting in JavaScript: Shouldn't returning a boolean be enough for a comparison function?

  • > 0a被認爲大於b和後應進行排序它
  • == 0a被認爲等於b並不要緊先來吧
  • < 0a被認爲是小於b,應進行排序之前

對數字,你可以用一個更簡潔的方法:

panoramas.sort((a, b) => { 
    return a.index - b.index; 
    // but make sure only numbers are passed (to avoid NaN) 
}) 

IE11,正如@teemu 所述,不支持箭頭功能,你必須使用函數表達式:


panoramas.sort(function(a, b) { 
    return a.index - b.index; 
}); 
+0

'return a.index - b.index'更加簡潔。 –

+0

thnx @MartinNyolt。有詳細的解決方案,因爲我認爲它會更容易理解 – bfmags

相關問題