я получил довольно довольно стандартный набор JS, похожий на этот:Javascript рода двусмысленность в разных браузерах
"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 массив как:
entities.sort(sortF);
Никаких изменений не мое ожидаемое поведение здесь, но результаты разные в разных браузерах. Например, в IE это нормально, но в Chrome он сортирует массив в другом порядке.
На MDN я заметил это под описание сортировки, но не уверен, если это уместно:
Если compareFunction (а, б) возвращает 0, оставить и Ь без изменений с по отношению друг к другу, но сортируются по всем различным элементам . Примечание: стандарт ECMAscript не гарантирует этого поведения
Как я могу заставить это работать одинаково во всех браузерах? Я хочу, чтобы функция сортировки оставила порядок как есть, если моя функция сортировки говорит о том, что два элемента равны.
Почему вы это делаете? Если вам нужно клонировать массивы, используйте https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice; если «сортировка» на самом деле является лучшим способом, http://stackoverflow.com/questions/3195941/sorting-an-array-of-objects-in-chrome/3195977#3195977. –
На практике моя функция sortF более сложна, но я уменьшил ее, чтобы вернуть 0, и у меня все еще есть эта проблема. – rumburak
* Сорт не обязательно стабильный. * От https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort –