2016-05-14 20 views
3

Ich versuche, eine Eigenschaft aus einem Objekt-Array zu entfernen.Wie entfernt man Eigenschaften aus einem Objekt-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 = 

Ich möchte, dass var2 so etwas enthält.

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

Gibt es eine Möglichkeit/cast var1 in den oben zu konvertieren? Mit anderen Worten möchte ich prop2 von var1 Objekt-Array entfernen und es var2 zuweisen. Wie kann ich das machen?

Antwort

2

können Sie Objekteigenschaft löschen, wie dieser zum Beispiel Diese

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

Das ist nicht, wo Sie 'Filter' verwenden würden. Sie würden Filter verwenden, um _items in einem Array_ oder nicht Eigenschaften zu entfernen oder beizubehalten. 'delete' erzeugt hier Nebenwirkungen. Diese Antwort verwendet 'Filter' auf eine völlig unsemantische Art und Weise als allgemeine Iterationsmethode. – Xufox

1

Durch Casting in TypeScript wird die Eigenschaft nicht entfernt, sondern nur in der IDE ausgeblendet, da sie zur Laufzeit in JavaScript kompiliert wird.

Vor allem, wenn Sie prop2 von nicht löschen möchten, während Sie die Eigenschaft von var2 löschen, müssen Sie es klonen. Dafür müssen Sie diese Funktion 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; 
} 

Verwenden Sie die Klon-Funktion var1 und Schleife jedes Objekt in var2 zu klonen Eigenschaft prop2 zu entfernen. Sie können durch die Kombination von Array.ForEach so mit JavaScript tun und löschen:

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

Dadurch wird prop2 in var1 so halten, aber entferne sie aus dem var2

8

scheint wie eine große Zeit .map()

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

Kurz, süß zu verwenden, und das tut, was Sie wollen.

MDN docs for .map()

+1

Vielleicht noch kürzer: D 'var1.map (({prop1, prop2}) => ({prop1, prop2}));' – drinchev

+0

Wahr! Aber Destrukturierungssyntax ist ungewöhnlich. – Paarth

Verwandte Themen