javascript - 如何将对象添加到该数组中?
问题描述
我为显示用户信息的页面创建了一条获取路线。在此我创建了一个列表数组,我已将其传递给渲染对象,该列表包含两件事,一个是正确显示的用户图像,另一个是他以包含不同对象的数组形式出席。
问题是当我推送这些对象时,它们没有被添加到日期数组中,也没有显示在列表数组中。此外,当我在控制台记录对象时,它们将单独显示。
router.get("/me", ensureAuthenticated, async (req, res) => {
var empCode = req.user.empCode;
var list = []
list.photo = await Document.findOne({
empCode: empCode
}).then(employee => {
return employee.photo;
});
list.attendance = await Attendance.findOne({
empCode: empCode
}).then(employee => {
var dates = [];
var emp = {};
employee.years.forEach(year => {
yearName = year.name;
emp["year"] = yearName;
year.months.forEach(month => {
monthName = month.name;
emp["month"] = monthName;
month.days.forEach(day => {
date = day.date;
inTime = day.inTime;
outTime = day.outTime;
status = day.status;
emp["date"] = date;
emp["inTime"] = inTime;
emp["outTime"] = outTime;
emp["status"] = status;
dates.push(emp); // Here is i console log the objects are getting displayed.
});
});
});
return dates;
});
console.log(list);
res.render("me", {
user: req.user,
list
});
});
如果我console.log(emp);
在 forEach 循环中,这就是结果。
{
year: '2020',
month: 'Jan',
date: '1',
inTime: '09:40',
outTime: '18:10',
status: 'On Time'
}
{
year: '2020',
month: 'Feb',
date: '3',
inTime: '10:15',
outTime: '18:15',
status: 'Late'
}
{
year: '2020',
month: 'Feb',
date: '4',
inTime: '10:20',
outTime: '18:20',
status: 'Late'
}
[ photo: '', attendance: [] ]
但如果我这样做dates.push(emp);
了,我就会明白。
[
photo: '',
attendance: [
{
year: '2020',
month: 'Feb',
date: '4',
inTime: '10:20',
outTime: '18:20',
status: 'Late'
},
{
year: '2020',
month: 'Feb',
date: '4',
inTime: '10:20',
outTime: '18:20',
status: 'Late'
},
{
year: '2020',
month: 'Feb',
date: '4',
inTime: '10:20',
outTime: '18:20',
status: 'Late'
}
]
]
而我想要的是这个。
[
photo: '',
attendance: [
{
year: '2020',
month: 'Jan',
date: '1',
inTime: '09:40',
outTime: '18:10',
status: 'On Time'
}
{
year: '2020',
month: 'Feb',
date: '3',
inTime: '10:15',
outTime: '18:15',
status: 'Late'
}
{
year: '2020',
month: 'Feb',
date: '4',
inTime: '10:20',
outTime: '18:20',
status: 'Late'
}
]
]
解决方案
您应该将变量转换emp
为对象的新实例。你应该像这样推送到数组。
dates.push(JSON.parse(JSON.stringify(emp));
这会将您的变量 emp 转换为对象的新实例,而与您在迭代期间访问的对象没有任何连接。
分配了非原始值的变量将获得对该值的引用。该引用指向对象在内存中的位置。变量实际上并不包含值。
Primitives vs. References 请阅读本文档以了解更多价值与参考
推荐阅读
- c++ - 将套接字接口从 Qt 移植到 STD 库
- php - 如何使用 Bootstrap 和身份验证正确启动 Laravel 8
- android - ViewModel vs Activity 成员变量?
- javascript - 将跨域请求阻止到 localhost 的 React 应用程序
- javascript - 增量间隔 - JS
- firebase - 设置 Firebase。找不到数据库URL
- vue.js - Vue-autosuggest:如何在选择时获取 autosuggest 组件的原始上下文?
- python - anaconda navigator 终端上的硒问题(Windows 10)
- javascript - 为什么“奶牛”旁边的 [0] 将“奶牛”数组作为数组项而不是作为数组中的数组添加到动物数组中?
- python - 使用另一个列表从字典中删除项目,其中包含 Python 中不需要的项目的 ID