javascript - 如何保存对象的初始语句?
问题描述
我有类型的对象:
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
也发生了变化。如何保存对象的初始语句?
结果我不需要修改 objectthis.groups
和过滤 object this.filteredObject
。
我知道问题是因为 JS 通过引用复制对象,但我不知道如何解决它。
完整代码是:
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];
}
结果初始对象console.log(this.groups);
也被修改
解决方案
因为您已经深度复制了未嵌套的父数据数组,所以您可以尝试以下方式 -
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
);
});
推荐阅读
- vue.js - 使用 v-for 为每个输入添加标签
- entity-framework - 实体类型“X”的属性“XID”是键的一部分,因此无法修改
- java - 无法滚动动态添加的片段 (Java)
- html - 打印贴纸之间的空白页 HTML CSS
- excel - 如何找到值然后将整行复制到另一张纸
- python - 错误:命令引发异常:AttributeError:“消息”对象没有属性“成员”
- json - 防止 Azure Logic App 将 JSON 输出到单行
- rust - Rust 声明性宏和 tt 的作用域
- javascript - 如何在反应中获取用户来自的先前路线
- c# - 基础提供程序在打开时失败(SQL Server 2019 和 EF)