为了账号安全,请及时绑定邮箱和手机立即绑定

为什么更改一个属性(对象)也会在另一个单独声明的属性中发生变化?

为什么更改一个属性(对象)也会在另一个单独声明的属性中发生变化?

忽然笑 2021-05-07 13:12:22
我有2个这样声明的属性:ngOnInit() {this.defaultRequirements = myData.property1.countryDocument; //should never changethis.filteredRequirements = myData.property1.countryDocument; }当我运行此onFilter函数时,defaultRequirements属性也会发生突变。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;      })    })}问题我不明白如何对this.filteredRequirements进行突变也对this.defaultRequirements进行突变(它们都等同于同一件事)!如何避免这种行为并使defaultRequirements不受filteredRequirements上所做更改的影响?
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

试试这个:


ngOnInit() {

    this.defaultRequirements = JSON.parse(JSON.stringify(myData.property1.countryDocument));   

    this.filteredRequirements = JSON.parse(JSON.stringify(myData.property1.countryDocument));

}

或者


ngOnInit() {

    this.defaultRequirements = {...myData.property1.countryDocument}

    this.filteredRequirements = {...myData.property1.countryDocument}

}


查看完整回答
反对 回复 2021-05-13
  • 2 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信