Если у меня есть приведенный ниже код для ссылки на все записи и синхронизации изменений:
this.productsRef.valueChanges({ idField: 'id' });
Как рандомизировать порядок документов, которые я получаю, но сохранить синхронизацию коллекции и документов с Firestore?
ОБНОВЛЕНО: я немного поиграл, похоже, это работает:
import { shuffle } from "lodash";
...
this.productsRef.valueChanges({ idField: 'id' }).subscribe((res:Product[])=> {
this.products = shuffle(res);
});
Извини за это. Я все еще жду лучших решений.
Обходной путь, который вы нашли, кажется хорошим, но вы можете добавить uniq()
в третью строку, то есть this.products = uniq(shuffle(res));
, чтобы документы отображались только один раз.
Кажется, что значения уже уникальны при использовании this.products = shuffle(res)
Я обновил свой ответ ниже. пожалуйста, проверьте
Преобразование моего комментария в ответ
Обходной путь, который вы нашли, кажется хорошим, но вы можете добавить uniq()
в третью строку, т.е.
this.products = uniq(shuffle(res));
так что документы будут появляться только один раз. Как указано в Документации 1
Метод _.uniq используется для создания массива уникальных значений по порядку из всех заданных массивов с использованием SameValueZero для сравнения на равенство.
И согласно Документации 2 метод shuffle()
Метод _.shuffle() создает массив перетасованных значений из заданной коллекции, используя версию алгоритма перетасовки Фишера-Йейтса.
Кажется, что значения уже уникальны при использовании this.products = shuffle(res)
Можете проверить с помощью Документация1 и Документация2
Если обновление является ответом, то, пожалуйста, опубликуйте его как есть, а не как обновление к сообщению с вопросом.