массив array.prototype.sort имеет другой порядок? - PullRequest
0 голосов
/ 30 сентября 2018

Вот мой код:

let arr = [
  { a: false, index: 1 },
  { a: true, index: 2 },
  { a: false, index: 3 },
  { a: true, index: 4 },
  { a: true, index: 5 },
]

arr.sort((a, b) => a.a && !b.a ? 1 : -1)

В Chrome возвращает

[
  {a: false, index: 1},
  {a: false, index: 3},
  {a: true, index: 2},
  {a: true, index: 4},
  {a: true, index: 5},
]

Это мой целевой результат.

Но я нахожу такой же код в Safari:

[
  {a: false, index: 3},
  {a: false, index: 1},
  {a: true, index: 5},
  {a: true, index: 4},
  {a: true, index: 2},
]

У них другой результат?

В конце концов, я решаю этот вопрос следующим образом:

arr.sort(
  (a, b) =>
    !a.a && b.a
      ? -1
      : a.a === b.a
        ? 0
        : 1
)

Я не могу получить diff?

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Существует много алгоритмов сортировки, и вы можете определить их в двух группах:

Стабильная сортировка и нестабильная сортировка

Алгоритм сортировки называется стабильным, если два объекта с равнымиклавиши отображаются в том же порядке в отсортированном виде, как и в несортированном.Принимая во внимание, что алгоритм сортировки называется нестабильным, если есть два или более объектов с одинаковыми ключами, которые не отображаются в одном и том же порядке до и после сортировки.

Начиная с ECMAScript Array.prototype.sort не определяет, какой алгоритм должна реализовывать платформа, Safari и Chrome просто используют разные алгоритмы.

V8 (Chrome) использует сортировку вставкой для небольших массивов (до 10 элементов).) и быстрая сортировка для больших массивов (что не является стабильной сортировкой), Safari просто использует другой алгоритм (ы) сортировки

0 голосов
/ 30 сентября 2018

Браузеры имеют различные реализации sort.Используйте другую сортировку / фильтр, чтобы упорядочить ее, или измените текущую функцию сортировки, чтобы учесть индекс, если вы этого хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...