我编写的自定义排序函数有问题。在 Chrome 和 Firefox 中,排序正常,我的记录根据需要切换。当我在 IE 11 中运行代码时出现问题。这是我的示例 https://jsfiddle.net/azb90cgv/8/
在我看来,IE11 正在切换输入排序函数的值。
使用数据集 [A,B,C,D] Chrome 和 FF 按组合 (A,B)(B,C)(C,D) 对我进行排序 IE 11 将项目比较为 (B,A )(C,B)(D,C)
这是一个问题,因为我的行 return 1;
没有翻转我的记录 IE11 期望 -1 值。
我的目标:我希望数据按顺序排序,并且当存在重复时切换项目的原始顺序。 我是否忽略了什么?为什么运行方式不同?
最佳答案
您需要按原始顺序对另一个属性进行稳定排序。如果两个项目具有相同的序列
,则使用此选项。
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>
关于javascript - JS Array.Sort IE 11 与 Chrome 的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36018350/