JavaScriptで三項演算子を使用して、ユーザー入力に基づいてオブジェクトの値を変更しています。次のコードを実行します。
var inputOneAns = inputOne == "Yes" ? "517" : "518";
ご覧のとおり、ユーザーが「はい」または「いいえ」を入力したかどうかに関係なく、数値文字列値をinputOneAns
に割り当てています。ただし、ユーザーが値を選択していない場合もあります(必須ではないため)。この入力を空白のままにした場合、空の文字列 ""をinputOneAns
に割り当てたいと思います。別の三項演算子の中に三項演算子を埋め込む方法または私はいますか?明確にするのを助けるために、ここに私が三項関数で満足させたいのと同じ関数がありますが、if elseステートメントがありますか?
if (inputOne == "Yes"){
var inputOneAns = "517"
}else if (inputOne == "No"{
var inputOneAns = "518"
}else{
var inputOneAns = ""
}
三項関数に複数の式を含めることは可能ですか?私が探しているものを達成するためのより良い方法はありますか?事前にヒントをありがとう。
はい、あなたは野生の入れ子の三元に行くことができます。このバージョンはかなり読みやすいと思います:
var foo = (
bar === 'a' ? 1 : // if
bar === 'b' ? 2 : // else if
bar === 'c' ? 3 : // else if
null // else
);
しかし、それは広く共有されている意見ではなく、おそらくif/else
またはswitch
チームで作業する場合。
このような状況では、switchステートメントがおそらく最良の選択です。
let inputOneAns;
switch(inputOne) {
case "Yes":
inputOneAns = "517";
break;
case "No":
inputOneNas = "518";
break;
default:
inputOneNas = "";
}
2つの条件を超えて3項演算を実行できた場合、それらは非常に厄介になります。条件をまとめることはできますが、なぜそれが必要になるのか私にはわかりません-それは信じられないほど面倒です.
最もエレガントでクリーンな方法は、オブジェクトリテラルを利用することです。
const Switch = (str) => ({
"Yes": "517",
"No": "518",
})[str] || '';
console.log(Switch("Yes")); // 517
console.log(Switch("No")); // 518
console.log(Switch("Non matching value")); // Empty
これには、読みやすく柔軟性があるという利点があります。
var r = inputOne == "" ? "" : (
inputOne == "Yes" ? "517" : "518");
残念ながら、JavaScriptはこれを行うための非常に簡潔で読みやすい方法を提供していません。個人的には、次のような単一行のif
ステートメントを使用します。
var inputOneAns;
if (inputOne === 'Yes') inputOneAns = '517';
if (inputOne === 'No') inputOneAns = '518';
else inputOneAns = '';
これを関数に抽象化すると、さらにクリーンになります(注:この場合はelse
は不要です)。
function getInputOneAns(inputOne) {
if (inputOne === 'Yes') return '517';
if (inputOne === 'No') return '518';
return '';
}
個人的に、私はこの2つの理由でswitchステートメントがあまり好きではありません。1つはコードを膨らませる余分なbreak
ステートメントで、もう1つはswitchステートメントが非常に制限されていることです。単一の変数。さらに、常に単一の文字列をチェックすることがわかっている場合は、単純なマップオブジェクトを使用します。
var map = { 'Yes': '517', 'No': '518' };
var inputOneAns = map[inputOne] || '';
ええ、else ifステートメントを使用するのと同じようにそれらをチェーンできますが、読みにくい場合もあります。そのため、私は複数の行に分割する傾向があります。
var inputOneAns = inputOne == 'Yes' ? '517' :
inputOne == 'No' ? '518' : '';
ただし、この場合は、すべてのケースで同じ値を比較しているので、switch
ステートメントを使用することをお勧めします。
Switchステートメントの古典的な使用法のようです:
let inputOneAns = '';
switch(inputOne) {
case 'Yes':
inputOneAns = "517";
break;
case 'No':
inputOneAns = "518";
break;
default:
inputOneAns = "";
}