如何从对象数组中删除属性?

11

我正在尝试从对象数组中删除属性。

export class class1 {
  prop1: string;
  prop2: string;
  prop3: string;
}
export class class2 {
  myprop = [
    { prop1:'A', prop2:"1", prop3:"descr1" },
    { prop1:'B', prop2:"2", prop3:"descr2" },
    { prop1:'C', prop2:"3", prop3:"descr3" },
  ];
  get(): class1[] {
    return this.myprop ;
  }
  add(value: class1): void {
    this.myprop.push(value);
  }
}
var var1 = class2.get();
var var2 = 

我希望var2包含这样的内容。

  [
    { prop1:'A', prop3:"descr1" },
    { prop1:'B', prop3:"descr2" },
    { prop1:'C', prop3:"descr3" },
  ];
有没有办法将 var1 转换/转型为上面的格式?换句话说,我想从 var1 对象数组中删除 prop2 并将其分配给 var2。我该怎么做?
4个回答

22

现在似乎是使用.map()的好时机

var var1 = class2.get();
var var2 = var1.map(obj => ({prop1: obj.prop1, prop3: obj.prop3}));

简短、简洁,功能齐全。

.map() 方法的 MDN 文档


4
可能更短 :D var1.map(({ prop1, prop2 }) => ({ prop1, prop2})); - drinchev

9
您可以这样删除对象属性,例如:
    var myprop = [
        {prop1: 'A', prop2: "1", prop3: "descr1"},
        {prop1: 'B', prop2: "2", prop3: "descr2"},
        {prop1: 'C', prop2: "3", prop3: "descr3"},
    ];

    myprop = myprop.filter(function (props) {
        delete props.prop2;
        return true;
    });
    console.log(myprop);

7
这里不应该使用 filter。你应该使用 filter 来删除或保留数组中的元素,而不是属性。在这里使用 delete 会产生副作用。这个答案错误地将 filter 当作通用迭代方法使用。 - Sebastian Simon
太好了,谢谢!有时候,老实说,JS(或者至少是它的新版本)比lodash或其他库更易读。 - DurkoMatko

1
在TypeScript中进行转换不会删除属性,而只会在IDE中隐藏它,因为它将被编译为JavaScript以供运行时使用。
首先,如果您不想从var2中删除prop2而不从var1中删除该属性,则需要对其进行克隆。 为此,您需要使用此JavaScript函数:
function cloneObject(obj) {
    if (obj === null || typeof obj !== 'object') {
        return obj;
    }

    var temp = obj.constructor(); // give temp the original obj's constructor
    for (var key in obj) {
        temp[key] = cloneObject(obj[key]);
    }

    return temp;
}

使用克隆函数来克隆var1,并循环遍历var2中的每个对象以删除属性prop2。您可以通过结合array.forEach和delete在JavaScript中实现此操作。
var var2 = cloneObject(var1);
var2.forEach((obj) => { delete obj.prop2; });

这样做将使prop2保留在var1中,但从var2中移除。

0

// Use delete:

    var user = {
      firstname:"Jack",
      lastname:"Prince",
    };

    var result = delete user.firstname;
    console.log(result,"firstname deleted");
    console.log(user);
    
    
    
  //using Object rest spread operator 

   const { firstname, ...data } = user;
   console.log(data);
  


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接