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
);
});

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);
添加回答
舉報