2016-05-14 18 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'を使用する場所ではありません。フィルターを使用して_itemsを配列で削除または保持します。プロパティではありません。 'delete'はここで副作用を生成します。この答えは、一般的な反復メソッドとして全く意味のない方法で 'filter'を使用しています。 – Xufox

1

TypeScriptでキャストするとそのプロパティは削除されませんが、実行時にJavaScript用にコンパイルされるため、IDEで非表示にするだけです。

まず、prop2var1から削除しない場合は、プロパティをvar2から削除する必要があります。それを複製する必要があります。

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

プロパティprop2を削除するvar2var1とループの各オブジェクトのクローンを作成するクローン機能を使用します。そのため、あなたはこのJavaScript関数が必要になります。あなたはarray.forEachを組み合わせることにより、JavaScriptでこれを実行し、削除することができます。

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

そうすることvar1prop2をKEEPが、var2

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

関連する問題