我有一个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) [ {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…} ]
如果数组中项目的顺序无关紧要,您可以使用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);