第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何保存對象的初始語句?

如何保存對象的初始語句?

動漫人物 2021-12-12 10:54:27
我有類型的對象:export interface IGroupLanguage {  name: string;  languages?: Language[];}let data = [ { "name": "Automation", "languages": [ { "Name": "English", "Lcid": 1, "RightToLeft": true, "Code": "EN", "Mapped": true } ] }, { "name": "Monitors", "languages": [ { "Name": "Russian", "Lcid": 2, "RightToLeft": true, "Code": "RU", "Mapped": true } ] } ];然后我嘗試過濾對象并返回一個新對象: this.filteredObject = [...this.groups];    this.filteredObject.map(item => {      item.languages = item.languages.filter(        lg =>          lg.Name.toLocaleLowerCase().indexOf(searchQuery) != -1 ||          lg.Code.toLocaleLowerCase().indexOf(searchQuery) != -1      );    });問題是初始對象this.groups也發(fā)生了變化。如何保存對象的初始語句?結(jié)果我不需要修改 objectthis.groups和過濾 object this.filteredObject。我知道問題是因?yàn)?JS 通過引用復(fù)制對象,但我不知道如何解決它。完整代碼為:search(searchQuery: string) {    this.filteredObject = [...this.groups];    this.filteredObject.map(item => {      let tempLang = [...item.languages];      item.languages = tempLang.filter(        lg =>          lg.Name.toLocaleLowerCase().indexOf(searchQuery) != -1 ||          lg.Code.toLocaleLowerCase().indexOf(searchQuery) != -1      );    });    console.log(this.groups);  }ngOnInit() {    this.filteredObject = [...this.groups];  }結(jié)果初始對象console.log(this.groups);也被修改
查看完整描述

3 回答

?
瀟湘沐

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個贊

因?yàn)槟呀?jīng)深度復(fù)制了未嵌套的父數(shù)據(jù)數(shù)組,所以您可以嘗試以下方式 -


this.filteredObject = [...this.groups];

    this.filteredObject.map(item => {

      let tempLang = [...item.languages];

      item.languages = tempLang.filter(lg =>

          lg.Name.toLocaleLowerCase().indexOf(searchQuery) != -1 ||

          lg.Code.toLocaleLowerCase().indexOf(searchQuery) != -1

      );

    });


查看完整回答
反對 回復(fù) 2021-12-12
?
叮當(dāng)貓咪

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個贊

Spread 語法執(zhí)行對象的淺拷貝。


關(guān)于使用擴(kuò)展語法復(fù)制數(shù)組的MDN 文檔:


在復(fù)制數(shù)組時,Spread 語法有效地深入一層。因此,它可能不適合復(fù)制多維數(shù)組,如下例所示(與 Object.assign() 和 spread 語法相同)。


這意味著如果頂層有任何對象,它們的引用將被復(fù)制。這就是這個問題的原因。


您可以使用 JSON.parse(JSON.stringify())深度克隆對象。但會有數(shù)據(jù)丟失如果對象DateS,功能undefined,Infinity或其他復(fù)雜的類型。此答案中的更多信息。


此外,當(dāng)你不返回任何值使用forEach(),而不是一個map()。


this.filteredObject = JSON.parse(JSON.stringify(this.groups));


filteredObject.forEach(item => {

  item.languages = item.languages.filter(lg =>

    lg.Name.toLocaleLowerCase().indexOf(searchQuery.toLocaleLowerCase()) != -1 ||

    lg.Code.toLocaleLowerCase().indexOf(searchQuery.toLocaleLowerCase()) != -1

  );

});

這適用于包含任何嵌套級別的對象的屬性。


現(xiàn)場示例:


let data = [ { "name": "Automation", "languages": [ { "Name": "English", "Lcid": 1, "RightToLeft": true, "Code": "EN", "Mapped": true } ] }, { "name": "Monitors", "languages": [ { "Name": "Russian", "Lcid": 2, "RightToLeft": true, "Code": "RU", "Mapped": true } ] } ];


let searchQuery = "English";


let filteredObject = JSON.parse(JSON.stringify(data));


filteredObject.forEach(item => {

  item.languages = item.languages.filter(lg =>

    lg.Name.toLocaleLowerCase().indexOf(searchQuery.toLocaleLowerCase()) != -1 ||

    lg.Code.toLocaleLowerCase().indexOf(searchQuery.toLocaleLowerCase()) != -1

  );

});



console.log(data);

console.log(filteredObject);


查看完整回答
反對 回復(fù) 2021-12-12
?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個贊

您需要深度克隆您的對象。如果您知道對象的結(jié)構(gòu),則可以創(chuàng)建具有遞歸性的自定義深度克隆函數(shù)。否則,您可以使用庫lodash


查看完整回答
反對 回復(fù) 2021-12-12
  • 3 回答
  • 0 關(guān)注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號