node.js - 如何在 Nodejs 中使用 If 语句和 for 循环?
问题描述
我有两个集合开发人员和项目。我想将多个项目分配给开发人员,但我不想重复分配任何项目。
/*@Submit assign project to developer */
exports.putDevAssign = (req, res, next) => {
const {projectId, teamId} = req.body
Team.findById(teamId)
.then(result => {
if(result.project.length == 0 ) {
Team.findByIdAndUpdate(teamId, {$push: { project : projectId } }, { new: true }).populate('project')
.then(result => {
res.redirect('/Assigned-Developer/' + teamId)
})
.catch(err => console.log(err))
} else {
for(let i = 0; i < result.project.length; i++) {
if( projectId == result.project[i] ) {
req.flash('message', 'Already Assigned')
return res.redirect('/Assigned-Developer/' + teamId)
} else {
console.log('hello')
Team.findByIdAndUpdate(teamId, {$push: { project : projectId } }, { new: true }).populate('project')
.then(result => {
return res.redirect('/Assigned-Developer/' + teamId)
})
.catch(err => console.log(err))
}
}
}
})
.catch(err => console.log)
}
但在上面的代码中,我可以分配第一个项目,它既不会重复存储。但从第二个项目开始,它被重复存储。我不希望这种情况发生。我只想分配唯一的项目。帮我解决我犯的这个愚蠢的错误。先感谢您。
解决方案
当您比较现有项目时,您将检查每个元素并在该元素不匹配时添加项目。在添加新项目之前,您应该比较所有当前项目。
试试这个代码:
/*@Submit assign project to developer */
exports.putDevAssign = (req, res, next) => {
const {projectId, teamId} = req.body
Team.findById(teamId)
.then(result => {
if(result.project.length == 0 ) {
Team.findByIdAndUpdate(teamId, {$push: { project : projectId } }, { new: true }).populate('project')
.then(result => {
res.redirect('/Assigned-Developer/' + teamId)
})
.catch(err => console.log(err))
} else {
for(let i = 0; i < result.project.length; i++) {
if( projectId == result.project[i] ) {
req.flash('message', 'Already Assigned')
return res.redirect('/Assigned-Developer/' + teamId) // project already in list
}
}
// if code reached here, project not in current project list, must add it
console.log('hello')
Team.findByIdAndUpdate(teamId, {$push: { project : projectId } }, { new: true }).populate('project')
.then(result => {
return res.redirect('/Assigned-Developer/' + teamId)
})
.catch(err => console.log(err))
}
}
})
.catch(err => console.log)
}
推荐阅读
- raspberry-pi - 使用 VPN 在网络命名空间中运行传输守护进程
- c++ - C++ 如果我 Endl,它会在文件末尾捕获字符“\n”,如果我不写 endl,它会捕获最后一个字符两次
- r - 重命名数据框中的多列向量而不键入所有名称
- python - Apache Beam 会话窗口不返回任何内容
- pip - Bazel Python 依赖错误 - 在获取存储库 python_external_deps 期间发生错误
- tensorflow - 如何使用专门用于 GCP 的 TFX SDK 实现 Kubeflow“运行参数”?
- python - 在有向加权图中找到从起点到所有目的地的最短路径的最快方法
- python - 为什么 Keras.preprocessing.sequence pad_sequences 处理字符而不是单词?
- c - 学习多线程,不明白为什么示例只带来很小(10%)的性能提升
- pencilkit - 如何在使用套索选择绘图并四处移动时禁用 PKCanvasView 滚动