【发布时间】:2021-09-22 11:50:28
【问题描述】:
我目前在 React 中有这个对象,我似乎无法得到我想要的输出,我不确定我是否正确地构造了这个对象。使用 Firestore 检索数据。我已将结果存储到此摘要数组中并尝试对其进行处理
const summary = [
{
data: [
{
date: "Sep 21 2021",
prodID: "005",
},
],
},
{
data: [
{
date: "Sep 21 2021",
prodID: "002",
},
{
date: "Sep 21 2021",
prodID: "002",
},
],
},
{
data: [
{
date: "Sep 21 2021",
prodID: "004",
},
{
date: "Sep 21 2021",
prodID: "004",
},
{
date: "Sep 21 2021",
prodID: "004",
},
{
date: "Sep 19 2021",
prodID: "004",
},
{
date: "Sep 19 2021",
prodID: "004",
},
],
}, ];
是否有可能得到这个输出..我已经尝试了无数个小时了..我如何编码才能得到这样的结果?
[
{
"count": 1,
"date": "Sep 21 2021",
"prodID": "005"
},
{
"count": 2,
"date": "Sep 21 2021",
"prodID": "002"
},
{
"count": 3,
"date": "Sep 21 2021",
"prodID": "004"
},
{
"count": 2,
"date": "Sep 19 2019",
"prodID": "004"
}
]
这是我尝试过的最新逻辑
firebase
.firestore()
.collection("batch")
.doc(ctx.currentUser.companyName)
.collection("products")
.get()
.then((snapshot) => {
let arr = [];
snapshot.forEach((doc) => {
const dt = doc.data().prodID;
if (!arr[dt]) {
arr[dt] = 1;
} else {
arr[dt] += 1;
}
});
for (const t in arr) {
firebase
.firestore()
.collection("batch")
.doc(ctx.currentUser.companyName)
.collection("products")
.where("prodID", "==", t)
.orderBy("dateAdded", "desc")
.get()
.then((snapshot) => {
let arr2 = [];
let c = 0;
snapshot.forEach((doc) => {
const dt = getDate(doc.data().dateAdded["seconds"]);
if (!arr2[c]) {
arr2[c] = { count: 1, date: dt, prodID: t };
} else {
console.log("in");
if (arr2.prodID === t) {
for (const d in arr2) {
if (arr2[d].count) {
arr2[d].count++;
}
}
}
}
c++;
});
let v = {};
v["data"] = arr2;
addSummary(v);
});
}
});
这是我执行后得到的结果
for (let j = 0; j < summary.length; j++) {
for (let k = 0; k < summary[j].data.length; k++) {
console.log(summary[j].data[k]);
}
}
【问题讨论】:
-
请分享您的尝试
-
1) 创建新的空数组:
const result = []2) 遍历summary的每个data元素(使用嵌套循环)并检查它是否已经存在于结果数组中 3) 如果因此,将计数加一 4) 如果没有,则推送到数组。 -
或者你可以等几分钟,有人会直接给你解决方案。
标签: javascript reactjs firebase google-cloud-firestore