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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/37222885/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-21 03:29:01  来源:igfitidea点击:

How to remove properties from an object array?

javascripttypescript

提问by Shawn

I am trying to remove a property from an object array.

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

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 = 

I would like var2 contain something like this.

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

  [
    { prop1:'A', prop3:"descr1" },
    { prop1:'B', prop3:"descr2" },
    { prop1:'C', prop3:"descr3" },
  ];

Is there a way to convert/cast var1into the above? In other words, I would like to remove prop2from var1object array and assign it to var2. How can I do that?

有没有办法转换/var1转换为上述内容?换句话说,我想prop2var1对象数组中删除并将其分配给var2. 我怎样才能做到这一点?

采纳答案by Ikhtiyor

You can delete object property like this e.g.

您可以像这样删除对象属性,例如

    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);

回答by Paarth

This seems like a great time to use .map()

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

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

Short, sweet, and does what you want.

简短,甜蜜,做你想做的事。

MDN docs for .map()

.map() 的 MDN 文档

回答by j3ff

Casting in TypeScript won't remove the property but only hide it in your IDE because it will be compile to JavaScript for runtime.

在 TypeScript 中进行转换不会删除该属性,而只会将其隐藏在您的 IDE 中,因为它会在运行时编译为 JavaScript。

First of all, if you don't want to remove prop2from var1while deleting the property from var2you need to clone it. For that you will need this JavaScript function:

首先,如果你不想删除prop2var1同时删去财产var2,你需要克隆它。为此,您将需要此 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;
}

Use the clone function to clone var1and loop each object in var2to remove property prop2. You can do so with JavaScript by combining array.forEach and delete:

使用 clone 函数克隆var1和循环每个对象var2以删除属性prop2。你可以通过结合 array.forEach 和 delete 来使用 JavaScript:

var var2 = cloneObject(var1);
var2.forEach((obj) => { delete obj.prop2; });

Doing so will KEEP prop2in var1but REMOVE it from var2

这样做将保持prop2var1但将其删除var2

回答by arul prince

// Use delete:

    var user = {
      firstname:"Hyman",
      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);