【发布时间】:2019-10-23 06:04:35
【问题描述】:
我必须深度克隆一个对象数组
filterList: Filter[] = [
new ChipsFilter('Rating', 'rating',
[
{
name: '5 ★',
key: '5',
value: true
},
{
name: '4 ★',
key: '4',
value: true
},
{
name: '3 ★',
key: '3',
value: true
},
{
name: '2 ★',
key: '2',
value: true
},
{
name: '1 ★',
key: '1',
value: true
}
]),
new CheckboxFilter('Country', 'country', [
{
name: 'India',
key: 'india',
value: true
},
{
name: 'Brazil',
key: 'brazil',
value: false
},
{
name: 'UAE',
key: 'uae',
value: true
},
{
name: 'Sri Lanka',
key: 'sri-lanka',
value: true
},
{
name: 'USA',
key: 'usa',
value: false
},
{
name: 'England',
key: 'england',
value: true
},
{
name: 'South Africa',
key: 'south-africa',
value: true
}
]),
new CalendarFilter('Date', 'createdAt', [
{
name: 'Start Date',
key: 'startDate',
value: ''
},
{
name: 'End Date',
key: 'endDate',
value: ''
}
]),
];
克隆后,我希望对象的数据类型相同,但我将对象作为类型,尝试了以下克隆方法。
- 使用 JSON 字符串化
this.filterList = this.filterList.map(a => Object.assign({}, a));
- 使用 object.assign
this.filterList = this.filterList.map(a => Object.assign({}, a));
【问题讨论】:
-
Object.assign使用这种方式不会以保留类型信息的方式克隆对象。根据这些类的结构(您没有显示),它可能根本不会克隆它们。 -
使用 Object.assign(...) 表示将第二个参数分配给第一个参数中表示的结构 - 在这种情况下,它是一个 Object 对象。
标签: javascript arrays typescript types deep-copy