Firefox не будет сортировать массив объектов, но Chrome и Opera - PullRequest
0 голосов
/ 05 декабря 2018

Когда я пытаюсь отсортировать массив объектов, он работает без проблем в Chrome и Safari, но Firefox не будет сортировать его вообще.

Вы можете просмотреть его JSFiddle здесь.Нажмите на заголовки таблицы для сортировки: http://jsfiddle.net/g5y3smu0/

Вот еще одна скрипка, в которой сортировка работает во всех трех браузерах: http://jsfiddle.net/srp89xyg/

В последней скрипте вы видите, что яя больше не использую localeCompare(), а затем он работает как брелок, но я не об этом.

Я проверил , и Firefox поддержал localeCompare() дляочень долгое время.

Я весьма озадачен тем, в чем здесь может быть проблема ... Кто-нибудь знает, в чем дело или как это исправить?

Обратите внимание, чтоМатериал для скрипки - это то, что я сделал ради этого вопроса.Я работаю над приложением AngularJS и решил использовать шаблон React для скрипок.Не рвите меня за то, что я не использую лучшие практики React и тому подобное;)

1 Ответ

0 голосов
/ 05 декабря 2018

Глядя на ваш код, кажется, что вы используете localCompare и имитируете результаты в случае большего, меньшего или равного, что уже делает localCompare.

Я упростил эту часть вашего кода в sortRecipientsByProperty до этого ипри использовании Firefox данные отображаются отсортированными z при нажатии, а затем z при повторном щелчке.

if (this.state[prop] === undefined || this.state[prop] === false) {
    this.state.items.sort((a, b) => (a[prop].localeCompare(b[prop], {ignorePunctuation: true})));
}
else {
    this.state.items.sort((a, b) => (b[prop].localeCompare(a[prop], {ignorePunctuation: true})));
}

В вашем коде есть опечатка, использующая localeCompare, следовательно, неверный результат:

this.state.items.sort(
    (a, b) => (
        (a[prop].localeCompare(b[prop], {ignorePunctuation: true})) < 0 ? -1 : 
        (b[prop].localeCompare(a[prop], {ignorePunctuation: true})) > 0 ? 1 : 0));

You 'сначала проверяя a против b, затем b против a, вы должны проверить a против b в обоих случаях (или b против всегда или не меняйте тест <0 на> 0).Это для объяснения, так как localeCompare уже обрабатывает все случаи, лучше использовать его только один раз.

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