Сортировка данных в angular 7

Мне нужно отсортировать метки в angular. Я делаю это из файла component.ts. Сортировка работает нормально. Он задает ключевое значение метки для сортировки. Но мое приложение на двух языках. поэтому сортировка с помощью ключа не работает, когда я переключаюсь на другой язык. Есть ли способ отсортировать его на любом языке

getlabel(Id: string): Observable<Dto[]> {
return this.httpClient
  .get(
    url
  )
  .pipe(
    map((data: any) => {
      data.sort((a, b) => {
        return a.label > b.label ? 1 : -1
      })
      return data
    })

  ) as Observable
}

Пожалуйста, рассмотрите возможность предоставления Минимальный воспроизводимый пример, если это возможно. Таким образом, более вероятно, что волонтеры SO смогут вам помочь.

lealceldeiro 27.06.2019 10:02
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
1
3 059
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте функцию localeСравнить:

.pipe(
    map((data: any) => {
      return data.sort((a, b) => {
        return a.label.localeCompare(b.label, 'he');
      })
    })
  ) as Observable

'he' для иврита, измените его на свой код языка

Stackblitz DEMO

Это иврит

benshabatnoam 27.06.2019 10:31

у меня два языка en и fr

queue 27.06.2019 10:36

Знаете ли вы, какой текущий язык отображения в каждый момент времени? вы пишете "когда я переключаюсь на другой язык", когда вы переключаете язык, сохраняете его в локальной переменной и передаете в localeCompare func

benshabatnoam 27.06.2019 10:38

хорошо, я понял, как использовать сравнение локали для сортировки на обоих языках, но сортировка не меняется, пока я не перезагружу страницу. Предположим, что это английский, он сортируется, а затем, когда я нажимаю на французский, он остается с английской сортировкой, пока я не перезагружу страницу.

queue 27.06.2019 10:42

я думаю, что мне нужно использовать onLanguagechange, но могу ли я использовать его в сервисе

queue 27.06.2019 10:44

Это ошибка в вашем коде, я обновлю ответ, чтобы исправить ее для вас.

benshabatnoam 27.06.2019 10:44

А также? все еще нет изменений в отсортированном списке?

benshabatnoam 27.06.2019 10:49

не сортирует, если не обновляется после смены языка

queue 27.06.2019 10:51

Это потому, что вы не выполняете это наблюдаемое в событии «переключить язык». когда вы переключаете свой язык, вызовите эту функцию, чтобы отсортировать список с новым кодом языка.

benshabatnoam 27.06.2019 10:55

Я создам простую демонстрацию, чтобы показать вам. Как вы «когда я переключаюсь на другой язык», это с тегом select?

benshabatnoam 27.06.2019 11:01

Давайте продолжить обсуждение в чате.

queue 27.06.2019 11:04

Это работает для сортировки на разных языках

.pipe(
    map((data: any) => {
      data.sort((a, b) => {
        return this.translate
          .instant(a.label)
          .localeCompare(this.translate.instant(b.label))
      })
      return data
    })
  ) as Observable

Передайте ключ, который существует во входном массиве.

function sortByKey(array: [], key: any, sortType = '') {
  if (!array.length) {
     return array;
  }

   return array.sort((a, b) => {
     if (sortType === 'desc') {
          if (b[key] < a[key]) { return -1; }
          if (b[key] > a[key]) { return 1; }
      } else {
          if (a[key] < b[key]) { return -1; }
          if (a[key] > b[key]) { return 1; }
      }

      return 0;
  });
}

Другие вопросы по теме