Глядя на ваш код, кажется, что вы используете 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 уже обрабатывает все случаи, лучше использовать его только один раз.