javascript - 数组打印同一个对象 n 次
问题描述
我有一个 mongodb 查询,然后我使用 for 循环结果并将一些项目推入新数组。但是输出显示相同的对象 n 次。
if 语句很好,查询也很好,问题出在对 closedTickets 的推送中,我打印要推送的对象,然后推送它,但我得到了那种奇怪的行为。我尝试使用 _id 作为键的哈希映射,如果映射没有键,则设置对象,但没有用,请帮助我。
代码:
const ticketsQuery = await Action.aggregate([
{
$match: {
createdTime: { $gte: new Date(from), $lte: new Date(to) },
action: { $in: ['open', 'hold', 'pending', 'closed']}
}
}, {
$group: {
_id: '$task',
actions: {
$push: {
action: '$action',
date: '$createdTime'
}
}
}
}, {
$lookup: {
from: 'tasks',
localField: '_id',
foreignField: '_id',
as: 'task',
}
}, {
$match: {
'task.organization': orgID
}
}
]);
const ticket = {}
const closedTickets = [];
for (const ticketsQueryElement of ticketsQuery) {
ticket.closedAt = 0;
ticket.openAt = 0;
ticket.holdAt = 0;
ticket.pendingAt = 0;
ticket.task = ticketsQueryElement._id
for (const closedTicket of ticketsQueryElement.actions) {
if (closedTicket.action === 'open') {
if (ticket.openAt === 0) {
ticket.openAt = closedTicket.date;
} else if (ticket.openAt < closedTicket.date) {
ticket.openAt = closedTicket.date;
}
}
if (closedTicket.action === 'hold') {
if (ticket.holdAt === 0) {
ticket.holdAt = closedTicket.date;
} else if (ticket.holdAt < closedTicket.date) {
ticket.holdAt = closedTicket.date;
}
}
if (closedTicket.action === 'pending') {
if (ticket.pendingAt === 0) {
ticket.pendingAt = closedTicket.date;
} else if (ticket.pendingAt < closedTicket.date) {
ticket.pendingAt = closedTicket.date;
}
}
if (closedTicket.action === 'closed') {
if (ticket.closedAt === 0) {
ticket.closedAt = closedTicket.date;
} else if (ticket.closedAt < closedTicket.date) {
ticket.closedAt = closedTicket.date;
}
}
}
if ((ticket.openAt !== 0 || ticket.holdAt !== 0
|| ticket.pendingAt !== 0) && ticket.closedAt !== 0) {
// output 1
console.log(ticket)
closedTickets.push(ticket);
}
}
// output 2
console.log(closedTickets)
输出显示:
输出 1:
{
closedAt: 2019-11-12T20:02:38.897Z,
openAt: 2019-11-11T18:04:10.296Z,
holdAt: 0,
pendingAt: 0,
task: 5dc6f9fad550ac3c68d8bcd3
}
{
closedAt: 2019-11-08T20:03:22.833Z,
openAt: 2019-11-07T17:08:10.769Z,
holdAt: 0,
pendingAt: 0,
task: 5dc37d03d550ac3c68d8aed6
}
{
closedAt: 2019-11-13T00:03:27.695Z,
openAt: 2019-11-11T20:08:10.305Z,
holdAt: 0,
pendingAt: 0,
task: 5dc9bdcb44386e3c697d61c9
}
输出 2:
[
{
closedAt: 2019-11-08T17:03:54.984Z,
openAt: 2019-11-07T16:03:06.234Z,
holdAt: 0,
pendingAt: 0,
task: 5dc377638d25253b5cbaa5d4
},
{
closedAt: 2019-11-08T17:03:54.984Z,
openAt: 2019-11-07T16:03:06.234Z,
holdAt: 0,
pendingAt: 0,
task: 5dc377638d25253b5cbaa5d4
},
{
closedAt: 2019-11-08T17:03:54.984Z,
openAt: 2019-11-07T16:03:06.234Z,
holdAt: 0,
pendingAt: 0,
task: 5dc377638d25253b5cbaa5d4
}
]
解决方案
推荐阅读
- javascript - 如何从其他组件访问角度组件
- c# - Entity Framework Core 增量整数
- aws-sdk-go - Golang AWS 开发工具包中不包含 AWS 计费服务
- python - 如何摆脱“使用 TensorFlow 后端”。在 Jupyter 笔记本中
- amazon-web-services - 如何将服务器上的文件内容复制到本地剪贴板?
- amazon-web-services - 使用 IAM 配置文件/临时凭证从 DBeaver 查询 AWS Athena 失败
- python - 调试 pyspark:IndexError("list index out of range") / JavaArray
- matlab - 在具有(1,3)平铺布局的同时保持子图为正方形
- php - “不能将 Laminas\Diactoros\UploadedFile 类型的对象用作数组”在 Cakephp 4 中具有多上传输入
- textselection - 在 iPad 上禁用 React Native Webview 文本选择放大镜