Преобразование вывода Observable из объекта в массив - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть документ Cloud Firestore, который должен быть массивом объектов.Это выглядит так:

docname: {
  0: {...}
  1: {...}
  2: {...}

Это ожидаемо, потому что я заполнил этот документ следующим образом

myDocRef.set( {...user.myArray});

Проблема, с которой я столкнулся, - это когда я получаю данные из документа.В настоящее время я делаю это следующим образом

getUserItems(uid) {
  return this._db.doc<MyObj>(`users/${uid}/mysubcollection/items`).valueChanges(); 
}

, который возвращает объект объектов, и мне нужно, чтобы он был массивом объектов, чтобы я мог использовать forEach() для него.

Я пыталсяиспользуя оператор map(), но он дает мне некоторые результаты, которых я не понимаю.

Итак, моя цель - преобразовать этот объект объектов в массив объектов, и я попытался это

items$.pipe(
      tap(item => console.log('before map', item )),
      map(item => [item]),
      tap(item => console.log('after map', item ))
    )
    .subscribe(...);

Это действительно своего рода работа, так как он преобразует объект объектов в массив объектов, но, конечно, он помещает все объекты в первый dim из двух dim-массивов, чтобы он выглядел следующим образом

Array [Object(9)]

Чтомогу ли я сделать здесь, чтобы преобразовать объект объектов в массив объектов так, чтобы мой конечный результат был таким

Array(9) [ {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…} ]

Итак, переходя от этого

Object(9) [ {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…} ]

к этому

Array(9) [ {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…} ]

1 Ответ

2 голосов
/ 13 апреля 2019

Если порядок элементов в массиве не имеет значения, вы можете просто использовать Object.values:

const objectOfObjects = {
  0: { name: "Zero" },
  1: { name: "One" },
  2: { name: "Two" },
  3: { name: "Three" }
};
const unorderedArray = Object.values(objectOfObjects);
console.log(unorderedArray);

Если они имеют значение, сначала получите ключ и значение, используя Object.entries, затем отсортируйте их в порядке возрастания и map выведите значения:

const objectOfObjects = {
  0: { name: "Zero" },
  1: { name: "One" },
  2: { name: "Two" },
  3: { name: "Three" }
};
const orderedArray = Object.entries(objectOfObjects).sort(([a], [b]) => a - b).map(([, obj ]) => obj);
console.log(orderedArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...