我必须深度克隆对象数组
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: ''
}
]),
];
克隆后,我希望对象的数据类型相同,但我将对象作为类型,尝试了以下克隆方法。
this.filterList = this.filterList.map(a => Object.assign({}, a));
this.filterList = this.filterList.map(a => Object.assign({}, a));
答案 0 :(得分:0)
fun <- function(var1, var2){
n <- table(var1, var2)
N <- length(var1); N # !!!!!
test1 <- N * n
test2 <- n/N
list <-list(test1, test2)
return(list)
}
a <- lapply(df.list, function(x)fun(x[,1],x[,2]) )
的第一个参数是目标对象。该对象实际上是结果。 Object.assign()
所做的只是将Object.assign()
实例自己的可枚举属性复制到该目标。
您可以做的是在CalendarFilter
中创建对象的新实例,而不是使用array.map()
将它们分配给通用对象。
Object.assign()
当然,您需要为数组中遇到的每种类型使用正确的构造函数。
答案 1 :(得分:0)
这将考虑变量对象类型:
class ChipsFilter {constructor(){this.chipsProp="chipsProp"}}
class CheckboxFilter {constructor(){this.checkboxProp= "checkboxProp"}}
class CalendarFilter {constructor(){this.calendarProp= "calendarProp"}}
const filterList = [
new ChipsFilter(),
new CheckboxFilter(),
new CalendarFilter(),
];
let out = filterList.map(obj=>Object.assign(new obj.constructor, obj));
console.log(out[0].constructor, out[0]);
console.log(out[1].constructor, out[1]);
console.log(out[2].constructor, out[2]);