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

问题描述:

我想从对象数组中删除一个属性。如何从对象数组中删除属性?

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。我怎样才能做到这一点?

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

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

这不是你要使用'filter'的地方。你可以使用过滤器去除或保留array_中的_items,而不是属性。在这里,“删除”会产生副作用。这个答案是以完全无意义的方式使用'filter'作为通用迭代方法。 – Xufox

在TypeScript中投射不会删除该属性,而只会将它隐藏在IDE中,因为它将被编译为运行时的JavaScript。

首先,如果您不想从var1删除prop2,同时从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; 
} 

使用克隆功能克隆var1和循环每个对象var2删除属性prop2。您可以通过合并array.forEach用JavaScript这样做,删除:

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

这样做将保持在prop2var1var2

这似乎是一个伟大的时间来使用.map()

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

短,甜甜的,你想要做什么。

MDN docs for .map()

+1

也许更短:D'var1.map(({prop1,prop2})=>({prop1,prop2}));' – drinchev

+0

True!但是解构语法并不常见。 – Paarth