对象的克隆数组删除类类型

时间:2019-06-07 18:02:48

标签: javascript arrays typescript types deep-copy

我必须深度克隆对象数组

  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: ''
      }
    ]),
  ];

克隆后,我希望对象的数据类型相同,但我将对象作为类型,尝试了以下克隆方法。

  1. 使用JSON字符串化
this.filterList = this.filterList.map(a => Object.assign({}, a));
  1. 使用object.assign
this.filterList = this.filterList.map(a => Object.assign({}, a));

2 个答案:

答案 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]);