これは私がやろうとしていることの簡単な例です:
switch (window.location.href.contains('')) {
case "google":
searchWithGoogle();
break;
case "yahoo":
searchWithYahoo();
break;
default:
console.log("no search engine found");
}
それが不可能/実現可能でない場合、より良い代替案は何でしょうか?
解決:
いくつかの応答を読んだ後、私は以下が簡単な解決策であることがわかりました。
function winLocation(term) {
return window.location.href.contains(term);
}
switch (true) {
case winLocation("google"):
searchWithGoogle();
break;
case winLocation("yahoo"):
searchWithYahoo();
break;
default:
console.log("no search engine found");
}
「はい」、しかしそれはあなたが期待することをしません。
スイッチに使用される式が評価されますonce-この場合、contains
は結果としてtrue/falseに評価されます(例:switch(true)
またはswitch(false)
)、ケースで照合できる文字列ではありません。
そのため、上記のアプローチは機能しません。このパターンがはるかに大きく/拡張可能でない限り、単純なif/else-ifステートメントを使用してください。
var loc = ..
if (loc.contains("google")) {
..
} else if (loc.contains("yahoo")) {
..
} else {
..
}
ただし、「google」や「yahoo」などを返すclassify
関数が、おそらく上記の条件を使用していたかどうかを検討してください。その後、そのまま使用できますが、この場合はやり過ぎです。
switch (classify(loc)) {
case "google": ..
case "yahoo": ..
..
}
上記はJavaScriptでの説明ですが、RubyおよびScala(および他の可能性が高い))は、「高度なスイッチ」の使用を処理するメカニズムを提供します。
別の実装はこれかもしれません。それほど多くはありませんが、switch(true)よりも優れています...
const href = window.location.href;
const findTerm = (term) => {
if (href.includes(term)){
return href;
}
};
switch (href) {
case findTerm('google'):
searchWithGoogle();
break;
case findTerm('yahoo'):
searchWithYahoo();
break;
default:
console.log('No search engine found');
};