1

我寫了一個自定義的排序函數有問題。在Chrome和Firefox中,排序正確觸發,並根據需要切換我的記錄。當我在IE 11中運行代碼時,問題就出現了。這裏是我的示例https://jsfiddle.net/azb90cgv/8/JS Array.Sort IE 11與Chrome的區別

從我看來,IE11將切換輸入到排序函數的值。 (A,B)(B,C)(C,D)對於我而言,IE 11將數據集[A,B,C,D]和Chrome按照組合A)(C,B)(D,C)

這是一個問題,因爲我的行return 1;沒有翻轉我的記錄IE11期望-1值。

我的目標:我希望數據按順序排序,並且當有重複切換項目的原始順序時。 我可以俯視嗎?爲什麼這個運行方式不同?

+0

沒有什麼在規定的排序過程究竟應該如何進行規範。您的比較函數在邏輯上不一致,因爲它沒有傳遞性。 – Pointy

+1

這是你在那裏的一個瘋狂的排序功能。 – destoryer

+0

好,所以我有一個對象數組,我按序列值排序。用戶可以更改這些。我想將記錄從陣列中的當前位置移動到用戶輸入的新序列位置,並將其餘記錄向下移動。我還要怎樣分類呢? – ecoles

回答

0

您需要對原始訂單進行穩定排序的其他屬性。這用於兩個項目具有相同的Sequence

var points = [{ id: 1, Sequence: 4 }, { id: 2, Sequence: 3 }, { id: 3, Sequence: 3 }, { id: 4, Sequence: 1 }] 
 
    order = true; 
 
points.forEach(function (a, i) { 
 
    a.order = i; 
 
}); 
 

 
document.getElementsByTagName('button')[0].onclick = function() { 
 
    points.sort(function (a, b) { 
 
     return a.Sequence - b.Sequence || (order ? a.order - b.order : b.order - a.order); 
 
    }); 
 
    order = !order; 
 
    document.getElementById("out").innerHTML = JSON.stringify(points, 0, 4); 
 
}
<button>Swap</button> 
 
<pre id="out"></pre>

+1

「*當存在重複開關時,項目的原始順序*」表示OP希望「...」 b.order - a.order' – Bergi

+0

感謝您的建議。有了這個想法,我可以在所有的瀏覽器中找到一些東西。 – ecoles