首页 > 解决方案 > 如何将对象添加到该数组中?

问题描述

我为显示用户信息的页面创建了一条获取路线。在此我创建了一个列表数组,我已将其传递给渲染对象,该列表包含两件事,一个是正确显示的用户图像,另一个是他以包含不同对象的数组形式出席。

问题是当我推送这些对象时,它们没有被添加到日期数组中,也没有显示在列表数组中。此外,当我在控制台记录对象时,它们将单独显示。

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'
}
  ]
]

标签: javascriptnode.js

解决方案


您应该将变量转换emp为对象的新实例。你应该像这样推送到数组。

dates.push(JSON.parse(JSON.stringify(emp));

这会将您的变量 emp 转换为对象的新实例,而与您在迭代期间访问的对象没有任何连接。

分配了非原始值的变量将获得对该值的引用。该引用指向对象在内存中的位置。变量实际上并不包含值。

Primitives vs. References 请阅读本文档以了解更多价值与参考


推荐阅读