Angular Firestore: случайный результат запроса

Если у меня есть приведенный ниже код для ссылки на все записи и синхронизации изменений:

this.productsRef.valueChanges({ idField: 'id' });

Как рандомизировать порядок документов, которые я получаю, но сохранить синхронизацию коллекции и документов с Firestore?

ОБНОВЛЕНО: я немного поиграл, похоже, это работает:

import { shuffle } from "lodash";
...    
this.productsRef.valueChanges({ idField: 'id' }).subscribe((res:Product[])=> {
   this.products = shuffle(res);
});

Если обновление является ответом, то, пожалуйста, опубликуйте его как есть, а не как обновление к сообщению с вопросом.

Vega 01.04.2023 10:22

Извини за это. Я все еще жду лучших решений.

Jhourlad Estrella 02.04.2023 05:19

Обходной путь, который вы нашли, кажется хорошим, но вы можете добавить uniq() в третью строку, то есть this.products = uniq(shuffle(res));, чтобы документы отображались только один раз.

Sandeep Vokkareni 03.04.2023 16:42

Кажется, что значения уже уникальны при использовании this.products = shuffle(res)

Jhourlad Estrella 05.04.2023 02:28

Я обновил свой ответ ниже. пожалуйста, проверьте

Sandeep Vokkareni 11.04.2023 07:51
Тестирование функциональных 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
5
108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Преобразование моего комментария в ответ

Обходной путь, который вы нашли, кажется хорошим, но вы можете добавить uniq() в третью строку, т.е.

this.products = uniq(shuffle(res)); 

так что документы будут появляться только один раз. Как указано в Документации 1

Метод _.uniq используется для создания массива уникальных значений по порядку из всех заданных массивов с использованием SameValueZero для сравнения на равенство.

И согласно Документации 2 метод shuffle()

Метод _.shuffle() создает массив перетасованных значений из заданной коллекции, используя версию алгоритма перетасовки Фишера-Йейтса.

Кажется, что значения уже уникальны при использовании this.products = shuffle(res)

Jhourlad Estrella 05.04.2023 02:28

Можете проверить с помощью Документация1 и Документация2

Sandeep Vokkareni 05.04.2023 08:10

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