I have 2 properties declared like so:
ngOnInit() {
this.defaultRequirements = myData.property1.countryDocument; //should never change
this.filteredRequirements = myData.property1.countryDocument; 
}
When I run this onFilter function, the defaultRequirements property also gets mutated.
onFilter(selectedSections) {
    let index = -1;
    this.defaultRequirements.forEach(country => {
      index++;
      const filteredSectionsList = [];
      country.section.forEach(section => {
        selectedSections.value.forEach(selectedSelection => {
          const selection = selectedSelection.split(/\s*[-]\s*/);  
          if (country.countryCode === selection[0]) {
            console.log('matched');
            filteredSectionsList.push(section);
          }
        });
        const countryObj = Object.assign({}, country, {
          section: [...filteredSectionsList]
        })
// Here is the issue, when filtering, this.defaultRequirements also gets changed!
        this.filteredRequirements[index] = countryObj;
      })
    })
}
The Problem
I don't understand how mutating this.filteredRequirements is ALSO mutating this.defaultRequirements (they both equal the same thing)! How can I avoid this behaviour and have defaultRequirements be unaffected by changes done on filteredRequirements?
 
     
    