【发布时间】:2016-05-07 02:51:37
【问题描述】:
我得到了相当标准的 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 标准不保证这一点 行为
我怎样才能使它在所有浏览器中都能正常工作?如果我的排序函数说两个元素相等,我希望排序函数保持原样。
【问题讨论】:
-
你为什么要这样做?如果您需要克隆数组,请使用developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…;如果“排序”真的是最好的方法,stackoverflow.com/questions/3195941/….
-
在实践中我的 sortF 函数更复杂,但我减少它只是为了返回 0,我仍然有这个问题
-
我建议在原始排序顺序的索引中包含一个属性。
-
听起来您实际上想要
noop版本的sort参数。
标签: javascript arrays sorting browser cross-browser