我写了一个自定义排序函数的问题。在Chrome和Firefox中,排序正常,我的记录会根据需要切换。当我在IE 11中运行代码时出现问题。这是我的示例https://jsfiddle.net/azb90cgv/8/
从我看来,IE11正在切换输入到sort函数中的值。
使用数据集[A,B,C,D] Chrome和FF按组合(A,B)(B,C)(C,D)排序,IE 11将这些项目比较为(B,A) )(C,B)(d,C)
这是一个问题,因为我的行return 1;
没有翻转我的记录,IE11期待-1值。
我的目标:我希望按顺序排序数据,并且当重复切换时,项目的原始顺序。 我忽略了什么吗?为什么这种方式不同?
答案 0 :(得分: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>