2016-06-01 8 views
1
私は通常、それらのフィールドを持っているか、それらが条件ので

構築物の真/偽の条件に基づいて、

let data 
if(something === true) { 
    data = { 
    name: 'String', 
    something: 'Something' 
    } 
else { 
    data = { 
    name: 'String' 
    } 
} 

に基づいていませんが、これを行うには非常に「汚いやり方のように思えるのオブジェクトを構築しています

これはデータが毎回再定義される必要がある+条件がもっとあれば、これは静かに大きなコード塊になるでしょう。これを達成するためのより簡潔な方法がありますか?

+1

を好む場合は、

let data let something = true data = Object.assign( { name: 'String' }, something && {something: 'Something'} ) console.log(data)

しますか、後で追加するだけです。 'var data = {name: 'String'}; if(something){data.something = '何か'; } '? –

+0

最も簡単な方法は、データを{=}にすることです。あなたのifでは、単にdata.name = 'String'を実行します。 data.something = 'Something' etc etcしかし、この猫にはたくさんの方法があります。 –

+2

[JSONオブジェクト](http://stackoverflow.com/q/2904131/1048572)のようなものはありません。とにかくJSONではありません(引用符がありません)。 – Bergi

答えて

3

オブジェクトに条件付きでプロパティを追加するだけで、オブジェクトリテラルとして全体を定義する必要はありません。

let data = { 
    name: 'String' 
}; 
if (something) { 
    data.something = 'Something'; 
} 
+0

もちろん、これについては漠然と不満足なことがあります。 –

+0

@torazaburo:識別子 'data'の繰り返しはおそらく?私はあなたのアプローチが気に入っていますが、何らかの理由でおそらく私はまだそれを使用しません。 – Bergi

0

あなたは、このような三項演算することができます使用することができます:undefinedは、非既存のオブジェクトのプロパティにアクセスしようとしたとき、あなたが得るものです
が、中に保つため

let data = { 
    name: 'String', 
    something: (something) ? "Something" : undefined, 
} 

事実上、これは動作するはずですがオブジェクトに列挙可能なプロパティを追加することに気をつけてください。

+0

元の結果とどのように違うか分かっている場合を除き、使用しないでください。 – Bergi

+0

@Bergiの違いは、そのプロパティは存在しますが、定義されていないか、それとも何か他のものがありますか? – maioman

+0

はい、そうです。あなたはその答えに関する段落を追加する必要があります。 – Bergi

0

あなたは次のように、それは非オブジェクトのパラメータを無視するため、Object.assignを使用することができます:あなたがなぜ最初に共通の値を割り当てない

something ? {something: 'Something'} : {} 
関連する問題