JS Array.Sort IE 11与Chrome

时间:2016-03-15 17:39:36

标签: javascript google-chrome sorting internet-explorer internet-explorer-11

我写了一个自定义排序函数的问题。在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值。

我的目标:我希望按顺序排序数据,并且当重复切换时,项目的原始顺序。 我忽略了什么吗?为什么这种方式不同?

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>