Angular - карта конвертирует вложенный массив из исходного объекта в пустой массив - PullRequest
0 голосов
/ 12 июля 2020

У меня есть объект, хранящийся в localStorage, например:

localStorage.setItem('employeeDepartmentCost', JSON.stringify(this.departments));

Я хочу восстановить этот объект и преобразовать его в собственный класс, который выглядит так: enter image description here

This is how I try:

 this.departments = JSON.parse(localStorage.getItem('employeeDepartmentCost')).map((department: any) => {
          var newDep = new Department(department.name,
            department.rows.map(row => new EmployeeCostRow(row.name, row.employees, row.salary)
            ));
          return newDep;

or

this.departments = JSON.parse(localStorage.getItem('employeeDepartmentCost')).map(department =>
        new Department(department.name,
          department.rows.map(row => new EmployeeCostRow(row.name, row.employees, row.salary)
          )
        ));

The problem is that the object is not converted correctly, the rows array becomes an empty array after applying map. введите описание изображения здесь

Как мне решить эту проблему, чтобы дождаться значений? Или как я могу сохранить собственный класс в локальном хранилище, чтобы мне больше не нужно было использовать карту. Спасибо!

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Я думаю, что проблема связана с этими строками

if (useTemplate === 0 && -1) {
   this.rows = [];
}

useTemplate равно 0, так как он отсутствует в вашем new Department, а -1 совпадает с true, поэтому строки переинициализирован в пустой массив.

1 голос
/ 12 июля 2020

попробуйте это

this.departments = JSON.parse(localStorage.getItem('employeeDepartmentCost'))
.map(department =>new Department(
   department.name, 
   department.rows.map(row => ({name: row.name, employees: row.employees, salary:row.salary} as EmployeeCostRow)  )
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...