2016-05-14 94 views
3

我想從對象數組中刪除一個屬性。如何從對象數組中刪除屬性?

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。我怎樣才能做到這一點?

回答

2

刪除您可以刪除對象屬性這樣如

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

1

在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

8

這似乎是一個偉大的時間來使用.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

相關問題