Как внести изменения (например, присвоить новый ключ и значение) в массиве переменной JSON постоянного JavaScript? - PullRequest
0 голосов
/ 24 октября 2018

Есть ли в любом случае, что переменные внутри сотрудников могут быть изменены глобально?Как добавить отсутствующие сотрудника в переменную сотрудника и использовать его позже?

/* Returns for each employee its absences */
app.get('/absences', (req, res) => {
  members().then((employees) => {
    absences().then((absences) => {
      employees.forEach(employee => {
        /* For each employee find his absences */
        employee = { ...employee, absences: absences.filter(abs => employee.userId == abs.userId) };
        if (employee.userId == 649){
          /* Printing the first for comparison of outputs */
          console.log(employee);
        }            
      });

      console.log(employees[1]);
      res.render('absences', { employees: employees });
    });
  });
});

Что я хочу, чтобы конечный результат для сотрудника в сотрудниках был:

{ crewId: 352,   id: 713,   image: 'http://place-hoff.com/300/400',   
  name: 'Ines',   userId: 649,  
  absences: [ 
             { admitterId: null,
               admitterNote: '',
               confirmedAt: '2017-01-09T18:43:29.000+01:00',
               createdAt: '2017-01-09T17:45:47.000+01:00',
               crewId: 352,
               endDate: '2017-01-11',
               id: 2634,
               memberNote: 'Nachmittag 0,5 Tage. Danke.',
               rejectedAt: null,
               startDate: '2017-01-11',
               type: 'vacation',
               userId: 649
             },

             { admitterId: null,
               admitterNote: '',
               confirmedAt: '2017-03-21T18:29:49.000+01:00',
               createdAt: '2017-03-15T14:54:31.000+01:00',
               crewId: 352,
               endDate: '2017-04-22',
               id: 3748,
               memberNote: 'Barcamp Salzburg',
               rejectedAt: null,
               startDate: '2017-04-21',
               type: 'vacation',
               userId: 649
             },
             { admitterId: null,
               admitterNote: 'Schönes langes WE!',
               confirmedAt: '2017-04-26T15:12:11.000+02:00',
               createdAt: '2017-04-26T09:55:40.000+02:00',
               crewId: 352,
               endDate: '2017-04-28',
               id: 4753,
               memberNote: '',
               rejectedAt: null,
               startDate: '2017-04-28',
               type: 'vacation',
               userId: 649
             }
     ]
 } 

Окончательный результат послецикл foreach, он не изменяется:

 { crewId: 352,
  id: 713,
  image: 'http://place-hoff.com/300/400',
  name: 'Ines',
  userId: 649 }

1 Ответ

0 голосов
/ 24 октября 2018

Ваш код разрывает «ссылку» на объект сотрудника в массиве

Вместо этого используйте Object.assign

Object.assign(employee, {absences: absences.filter(abs => employee.userId == abs.userId) });

Это добавляет свойство отсутствий кemployee, а не то, что происходит в вашем коде, объект employee по сути копируется поверхностно, поэтому никаких изменений в объекте employee внутри массива

нет.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...