gpt4 book ai didi

javascript - 将 Observable 的输出从对象转换为数组

转载 作者:行者123 更新时间:2023-12-01 01:05:47 24 4
gpt4 key购买 nike

我有一个 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(...);

这确实有效,因为它将对象的对象转换为对象数组,但当然它将所有对象放入两个暗淡数组的第一个暗淡中,看起来像这样

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获取键和值,然后按升序对它们进行排序,并映射出值:

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);

关于javascript - 将 Observable 的输出从对象转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55661787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com