javascript - JavaScript:除非显式访问,否则不会显示动态属性
问题描述
我正在使用 NodeJs,我在一个对象内创建一个动态属性,然后将它推入一个数组。问题是,当我通过访问变量时,console.log(object[dynamic_property_name])
我可以在控制台中看到它,但是当我console.log(object)
没有显示动态属性时。
这是代码,有问题的属性在teachers_matieres
元素对象中。PS:我控制台在代码的每个步骤中(明确地)记录了该属性,甚至在返回之前,它显示。但是当我尝试打印它没有显示的对象时,邮递员也没有。
router.get('/get-all-messages', async function (req, res, next) {
let children = [];
const parent = await Parent.findOne({ _id: req.query.user_id });
const students = await Student.find({ parentPersonalId: parent.personalID });
for (let i = 0; i < students.length; i++) {
var element = students[i];
element['teachers_matieres'] = [0];
const inscription = await Inscription.findOne({ studentID: element._id });
const theClass = await Classe.findOne({ _id: inscription.classeID });
const schedule = await Schedule.findOne({ classeID: theClass._id });
for (let i = 0; i < schedule.teacherID.length; i++) {
if( schedule.teacherID[i]==null)
continue
const tuple = [
await Teacher.findOne({ _id: schedule.teacherID[i] }),
await Matiere.findOne({ _id: schedule.matierID[i] }),
];
// if (!tuple in element['teachers_matieres']){
console.log(element['teachers_matieres'].push(tuple));
// }
}
//director selection
const director = await Director.find({_id:inscription.directeurID})
element['director'] = director
const annexe = await Annex.find({_id:director.annexID})
const scholar = await ScholarGroup.find({_id:annexe.scholarGroupID})
const ceo = scholar.ceo
children.push(element);
}
const msgs = await Messagerie.find().or([
{ senderID: parent._id},
{ receiverID: parent._id ,
'approved.isApproved':true},
]);
return res.json({
error: false,
message: 'success',
data: { children: children, messages: msgs },
});
});
这是邮递员的输出:
{
"error": false,
"message": "success",
"data": {
"children": [
{
"localisation": {
"payer": "medea",
"wilaya": "medea",
"daira": "medea",
"commune": "medea"
},
"authentication": {
"code": "uhB9Y",
"expired": false
},
"tokens": [],
"unreadNotices": [],
"absence": [],
"inbox": [],
"msgSent": [],
"paymentTypes": [
"5f6a1749ddcfde4f3b0ebaf4"
],
"_id": "5f68a2ec489f029205bdaa42",
"firstNameFr": "abdou",
"lastNameFr": "moumen",
"firstNameAr": "moumen",
"lastNameAr": "بن احمدي",
"parentPersonalId": "dddd",
"birthday": "NaN-NaN-NaN",
"inscriptionNbr": "101",
"image": "",
"state": false,
"systemscolaire": "Interne",
"__v": 0
}
],
"messages": [
{
"approved": {
"isApproved": true,
"date": "21-9-2020",
"time": "17:22:4"
},
"fileUrl": [
{
"fieldname": "file",
"originalname": "cccc.pdf",
"encoding": "7bit",
"mimetype": "application/pdf",
"destination": "/home/admin/assets/schools/eco1/5f6899c86f84e38b88e270c0/messagesFiles",
"filename": "21-9-2020_cccc.pdf",
"path": "/home/admin/assets/schools/eco1/5f6899c86f84e38b88e270c0/messagesFiles/21-9-2020_cccc.pdf",
"size": 237233
}
],
"_id": "5f68dfae6a7b33b1c7b1f688",
"senderID": "5f68a354489f029205bdaa45",
"receiverID": "5f68a2d5cff2d591af390281",
"subject": "teacher ver parent",
"description": "<p>teacher ver parent</p>\n",
"date": "21-9-2020",
"time": "17:15:26",
"__v": 0
},
{
"approved": {
"isApproved": true,
"date": "22-9-2020",
"time": "10:53:39"
},
"fileUrl": [
{
"fieldname": "file",
"originalname": "NoticeSendReceive.js",
"encoding": "7bit",
"mimetype": "text/javascript",
"destination": "/home/admin/assets/schools/eco1/5f6899c86f84e38b88e270c0/messagesFiles",
"filename": "21-9-2020_NoticeSendReceive.js",
"path": "/home/admin/assets/schools/eco1/5f6899c86f84e38b88e270c0/messagesFiles/21-9-2020_NoticeSendReceive.js",
"size": 25393
}
],
"_id": "5f68e2174ce23cb39a7b9d22",
"senderID": "5f68a354489f029205bdaa45",
"receiverID": "5f68a2d5cff2d591af390281",
"subject": "teacher ver parent",
"description": "<p>message</p>\n",
"date": "21-9-2020",
"time": "17:25:43",
"__v": 0
}
]
}
}
我真的需要将该属性附加到每个元素,我该怎么做?动态属性有什么问题?
解决方案
如果您使用 Sequelize 之类的东西从数据库中获取对象,那么您应该在添加一些属性之前将它们转换为普通对象。例如,在 Sequelize 中,您应该get({ plain: true })
为每个获取的对象调用。
const inscription = await Inscription.findOne({ studentID: element._id });
const plainInscription = inscription.get({ plain: true })
plainInscription[teachers_matieres] = // something
console.log(plainInscription) // now you can see your prop
推荐阅读
- ms-access - MS Access 链接的共享点表 - 无法更新值
- glassfish - 如果服务器在 payara 中停止/关闭,则向最终用户显示维护“自定义消息”
- javascript - JavaScript 在提交时返回 false 不起作用
- if-statement - 批处理文件在 if 语句处不断崩溃
- reactjs - React hydration - 文本内容不匹配
- python - 熊猫交叉表填写所有值
- html - 如何在 AEM 6.5 的 RTE 组件中包含“源编辑”插件?
- node.js - Discord Bot - 反应收集器/嵌入编辑
- python - 配置解析器打开文件但不返回任何内容?
- algorithm - “稳定”k-最大元素算法