2017-08-31 5 views
3

私は大きなjsonオブジェクトを持っています。 x = a.b.c.d.e.f.gにアクセスする必要があります。ただし、b(またはc,d,e ...)は未定義です。このデータ構造は他の場所からインポートされています。javascriptの既存の演算子ですか?

xnullまたはundefinedを割り当てようとするとエラーが発生しますか?

+1

https://github.com/tc39/proposal-optional-chainingを(ただし、バベルプラグインがあります)また、重複:[ES6/2015でのNull-safeプロパティへのアクセス(条件付き割り当て)](https://stackoverflow.com/questions/32139078/null-safe-property-access-and-conditional-assignment-in-es6 -2015/41897688) – yuriy636

答えて

3

最も簡単な方法は、try catch

try { 
    x = a.b.c.d.e.f.g 
} catch(e) { 
    x = undefined; 
} 

optional chainingあなたはここでそれを確認することができますと呼ばれるこのための提案があります使用することです:https://github.com/tc39/proposal-optional-chaining

x = a.b?.c?.d?.e?.f?.g 

をあなたができるでしょうtranspilerを使用している場合をそれを使用することができますが、それはまだ非常に初期段階にあり、仕様でサポートされることは受け入れられない可能性があります

2

somこれを解決するための提案(構文上の砂糖不足)問題。うまくいけば、我々はこれを行うことがsomewhen:しかし

let x = a?.b?.c?.d?.e; 

を、そして私たちは、変数が定義されていない場合は、オブジェクトにフォールバックする必要があるまで:

var x =(((((a || {}).b || {}) || {}).c || {}).d || {}).e; 

私はこれは非常に醜いがあると認めます。たぶん、非構造をより美しくされているオブジェクト:|ステージ1での提案があり

let ({ 
    b: { 
    c: { 
     d: { e:x } = {} 
    } = {} 
    } = {} 
}) = a; 
関連する問題