我得到了相当标准的JS数组,类似于:
"entities": [
{
"id": "1111",
"options": {
"label": "Label",
"choices": [
{
"value": "222222"
},
{
"value": "444444"
}
]
}
},
{
"id": "2222",
"options": {
"label": "Label",
"choices": [
{
"value": "333333"
},
{
"value": "555555"
}
]
}
},
...
我得到了排序函数,它总是告诉两个元素是相等的,看起来像这样:
function sortF(a,b){
return 0;
}
现在我对实体数组进行排序,如:
entities.sort(sortF);
我在这里的预期行为没有变化,但不同浏览器的结果不同。例如,在IE上,这很好,但在Chrome上,它会按不同的顺序对数组进行排序。
在MDN上,我在排序描述下注意到了这一点,但不确定这是否相关:
如果compareFunction(a,b)返回0,则使用保持a和b不变相互尊重,但按所有不同分类元素。注意:ECMAscript标准不能保证行为
如何使其在所有浏览器中都能正常工作?如果我的排序函数说两个元素相等,我希望排序函数保持顺序不变。
我建议使用自己的排序属性进行稳定排序:
entities.forEach(function (a, i) {
a.origin = i;
});
function sortF(a, b){
return a.origin - b.origin;
}
entities.sort(sortF);
结果,与原始数组具有相同排序顺序的稳定排序