2017-05-24 21 views
0

私は、このオブジェクトを持っている:未定義のプロパティをオブジェクトから削除する方法は?

​​

は今、時々、このプロパティのいくつかは未定義です。私が欲しいのは、this.prepaidDetailForm.prepaidDetailsのプロパティのうちの1つが表示されないように定義されていない場合です。だから例えばthis.prepaidDetailForm.prepaidDetails.firsNameが定義されていない場合、私は'firstName'プロパティisnideオブジェクトを作成する必要はありません。どのように私はそれを行うことができますどのような提案?

+0

を削除することを ' if(typeof X!== "undefined")this.prepaidObject ["key"] = X; ' –

+0

なぜ単に"有効な "_プロパティのみをチェックして追加できるのであれば、追加されたプロパティを削除したいのですか? –

答えて

4

あなたのオブジェクトをチェックしてください:

for(var m in this.prepaidObject) { 
     if (this.prepaidObject[m] == undefined) { 
      delete this.prepaidObject[m]; 
     } 
    } 
+0

オブジェクトをループすることはできますか? –

+0

はい、私が投稿したループでは、mはメンバ参照になります。 – SPlatten

+0

正直言って、それは私にはまったく新しいものです、X'D、私はあなたがES6の各(例えば)を使ってそれを行うことができると思っていましたが、このように私はそれを知らない。 –

0

おそらくタイプを確認する必要があります。

(typeof(this.prepaidDetailForm.prepaidDetails.firsName) != "undefined") ? this.prepaidDetailForm.prepaidDetails.firsName : '' 

その基本的:

var firstName = ''; 
if(typeof(this.prepaidDetailForm.prepaidDetails.firsName) != "undefined") 
    firstName = this.prepaidDetailForm.prepaidDetails.firsName; 
+0

これはちょっと変わったものですが、固定キーの値でテストするのではなく、自動的に追い出されるべきです。 ;) –

1

一つの方法は、キーを経由してのみ定義されているものを追加することです:

this.prepaidObject = { }; 
Object.keys(this.prepaidDetailForm.prepaidDetails) 
    .forEach(function(key) { 
      var val = this.prepaidDetailForm.prepaidDetails[key]; 
      if (val !== undefined) { 
       this.prepaidObject[key] = val; 
      } 
    }); 

これはのキーを前提としていますはprepaidDetailsと同じで、それらのすべてが同じルールに従います。特に

あなたはES6を使用している場合は、そのようmapreduceを使用して、これは、よりエレガントになるかもしれない:

this.prepaidObject = Object.keys(this.prepaidDetailForm.prepaidDetails) 
    .map(key => ({key, val: this.prepaidDetailForm.prepaidDetails[key]})) 
    .reduce((obj, {key, val}) => { 
      if (val !== undefined) { 
       obj[key] = val; 
      } 
      return obj; 
    }, {}); 

、さらに簡潔なアプローチよりES6の機能を使用して:

this.prepaidObject = Object.keys(this.prepaidDetailForm.prepaidDetails) 
    .map(key => ({key, val: this.prepaidDetailForm.prepaidDetails[key]})) 
    .filter(({_, val}) => val !== undefined) 
    .reduce((obj, {key, val}) => Object.assign(obj, { [key]: val }), {}); 
0
this.prepaidObject = {}; 
for (var i in this.prepaidDetailForm.prepaidDetails) { 
    if (typeof(this.prepaidDetailForm.prepaidDetails[i]) !== 'undefined') { 
    this.prepaidObject[i] = this.prepaidDetailForm.prepaidDetails[i]; 
    } 
} 

あなたはまた、null値や未定義を除外したい場合は、に条件を変更します:

if (this.prepaidDetailForm.prepaidDetails[i] != null) 

ないダブル==答えを以下でOK。 null == undefinedしかしnull !== undefined

0

あなたはJSON.parseとJSONを使用して、未定義削除することができ

var prepaidObject = { 
    'customerType' : 'TestCustType', 
    'firstName' : "sample FirstName", 
    'lastName' : "sample LastName", 
    'note' : undefined 
}; 

、あなたが1以下のような物を持っていると仮定しているため。文字列化方法、

JSON.parse(JSON.stringify(prepaidObject)); 
console.log(prepaidObject) 

出力はLodashを使用して

{ 
    'customerType' : 'TestCustType', 
    'firstName' : "sample FirstName", 
    'lastName' : "sample LastName" 
} 
1

は1行で、それはあまりにも簡単に、次のようになります。

_.pickBy(this.prepaidObject, _.identity); 

すべてfalsey

関連する問題