Проблема с переназначением значения списку в Angular - PullRequest
0 голосов
/ 29 мая 2020

привет, у меня есть список проектов listOfPhasesWithTasks, который я получаю из backEnd. Я назначил его локальной переменной filterPhasesWithTasks, которую использую в остальной части проекта. Предполагается, что он будет работать как резервная копия. Когда я выполняю фильтрацию следующим образом:

 this.filteredPhasesWithTasks.forEach((phase) => {
                    phase.tasks = phase.tasks.filter(task => task.taskName !== null && task.taskName.toUpperCase().includes(filterParam.taskName.toUpperCase()));
                });

, я не понимаю, почему это также меняет мой listOfPhasesWithTasks. Я ожидаю, что он изменит только filterPhasesWithTasks, как говорит код.

1 Ответ

1 голос
/ 29 мая 2020

В Javascript (и Typescript) объекты передаются по ссылке .

Это означает, что если у вас есть объект и вы назначаете его новому, вы не дублируете объект, у вас есть ссылка на первый объект из обеих переменных. Следовательно, изменение поля в одной из присвоенных вами переменных «изменяет его для обеих». Фактически, изменяет его на единственный существующий объект, на который указывают обе ваши переменные: P

Вы можете рассмотреть возможность использования метода cloneDeep , предлагаемого библиотекой Loda sh. Там вы найдете много других полезных ярлыков :)

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