###前提・実現したいこと
このようなオブジェクトがあります。
jquery
1var obj = { 2 parent:{ 3 apple:{ 4 jp:'りんご', 5 en:'apple', 6 zh:'苹果' 7 } 8 } 9};
そして次のようにitem
とlang
が変数なのですが、item
がない時点でundefined
のエラーとなってしまいますよね。
jQeury
1const item = 'xxx'; 2const lang = 'ja'; 3const name = obj['parent'][item][lang];
これをitem
がない時点で判定せず、この式全体で判定して(item
かlang
がいずれもない状態で初めて判定して)、notext
を代入することはできませんでしょうか?
つまり次のようなことをしたいのです。次だと実際にはitem
がないのでエラーとなりますが、式全体で判定してnotext
を代入したいのです。
jQeury
1const item = 'xxx'; 2const lang = 'ja'; 3const name = obj['parent'][item][lang] || 'notext';
###該当のソースコード
実際には以下の流れです。
最初は問題ありませんが、2つ目をnotextとしたいのです。
jQuery
1var obj = { 2 parent:{ 3 apple:{ 4 jp:'りんご', 5 en:'apple', 6 zh:'苹果' 7 } 8 } 9}; 10 11fruits1('apple','jp'); // 問題なし 12fruits1('xxx','jp'); // 現状はエラーとなるが、これをnotextとしたい 13function fruits1(item,lang){ 14 const name = obj['parent'][item][lang] || 'notext'; 15 console.log('fruits1' + name); 16}
###試したこと
次のようにitem
がない時点で三項演算子を使えばいいのですが、この処理が大変手間に感じるのです。
jQeury
1fruits2('apple','jp'); // 問題なし 2fruits2('xxx','jp'); // notextとなってOK 3function fruits2(item,lang){ 4 const name = obj['parent'][item] ? obj['parent'][item][lang] : 'notext'; 5 console.log('fruits2' + name); 6}
なぜ手間かというと実際のオブジェクトはもっと階層が深いので、上のような三項演算子では済ませることができず、条件分岐をたくさんかかないといけないためです。
その手間があるので、式全体で判定してnotext
を代入したいというのが実現したいことなのですが、何か良い方法ございましたらお助けいただけませんでしょうか。
回答4件
あなたの回答
tips
プレビュー