[英]Combination inside switch case
我曾經有一個簡單的switch case
,像這樣:
const expr = 'Papayas'; switch (expr) { case 'Oranges': console.log('Oranges'); break; case 'Mangoes': console.log('Mangoes'); break; case 'Papayas': console.log('Papayas'); break; }
但現在一些標准發生了變化,我需要為所有三種情況添加一條規則,並保持舊功能不變。 因此,以防萬一,我將擁有Papayas
,我的鹽將是All
和Papayas
。 我試着像這樣組合它:
const expr = 'Papayas'; switch (expr) { case 'Oranges': case 'Mangoes': case 'Papayas': console.log('All'); case 'Oranges': console.log('Oranges'); break; case 'Mangoes': console.log('Mangoes'); break; case 'Papayas': console.log('Papayas'); break; }
但這不能正常工作。 我總是在結果中得到All
和Oranges
。 有沒有辦法用一個switch case
做到這一點?
你可以做這樣的事情:
const output = ['All'];
switch (expr) {
case 'Oranges':
output.push('Oranges');
break;
case 'Mangoes':
output.push('Mangoes');
break;
case 'Papayas':
output.push('Papayas');
break;
}
console.log(...output);
如果我忘記休息會怎樣?
如果您忘記了中斷,則腳本將從滿足條件的情況下運行,並且無論是否滿足條件都將在此之后運行這些情況。 -
switch
上的 MDN JS 文檔
在您的情況下發生的情況是它與case 'Papayas': console.log('All')
匹配,然后運行下一個case 'Oranges': console.log('Oranges') break;
盡管沒有得到滿足; 之后是這種情況的break
- 如果沒有這個,你也會輸出Mangoes
和Papayas
。
第一個微不足道的解決方法是在所有開關情況下復制console.log('All')
:
switch (expr) {
case 'Oranges': console.log('All'); console.log('Oranges'); break;
case 'Mangoes': console.log('All'); console.log('Mangoes'); break;
case 'Papayas': console.log('All'); console.log('Papayas');
}
最后的break
可以省略。 需要使用第二個switch
並復制case
s 的另一種方法是只執行一個switch
:
let val = expr;
switch (val) {
case 'Oranges':
case 'Mangoes':
case 'Papayas':
console.log('All')
}
switch (val) {
case 'Oranges': console.log('Oranges'); break;
case 'Mangoes': console.log('Mangoes'); break;
case 'Papayas': console.log('Papayas'); break;
}
但我會質疑switch
是否是在這里使用的合適的語言結構。 想到一個if
:
let val = expr;
if (val == 'Oranges' || val == 'Mangoes' || val == 'Papayas') {
console.log('All');
switch (val) {
case 'Oranges': console.log('Oranges'); break;
case 'Mangoes': console.log('Mangoes'); break;
case 'Papayas': console.log('Papayas'); break;
}
}
理想情況下,您可以在 JS 術語中的字典/“對象”中查找消息:
const messages = {
Oranges: 'Oranges',
Mangoes: 'Mangoes',
Papayas: 'Papayas'
}
let message = messages[expr];
if (message) {
console.log('All');
console.log(message);
}
如果您的代碼不僅包含映射數據 -> 數據,而是包含數據 -> 操作,也可以使用箭頭函數:
const funcs = {
Oranges: () => console.log('Oranges'),
Mangoes: () => console.log('Mangoes'),
Papayas: () => console.log('Papayas')
}
let func = funcs[expr];
if (func) {
console.log('All');
func();
}
如果break;
沒有聲明。 下面的示例使用條件中斷來輸出以下內容。
All - Oranges Mangoes and Papayas
Oranges
All - Mangoes and Papayas
Mangoes
Papayas
Input not recognized.
const expr = 'MangPap'; var output = ''; switch (expr) { case 'All': output = 'All - '; case 'Oranges': if ( output.length > 0 ) { output += 'Oranges'; } else { output += 'Oranges'; } if (expr === 'Oranges') { break; } case 'MangPap': if ( output.length > 0 ) { } else { output += 'All - '; } case 'Mangoes': if ( output.length > 0 ) { output += ' Mangoes'; } else { output += 'Mangoes'; } if (expr === 'Mangoes') { break; } case 'Papayas': if ( output.length > 0 ) { output += ' and Papayas'; } else { output += 'Papayas'; } if (expr === 'Papayas') { break; } default: if ( output.length > 0 ) { } else { output += output = 'Input not recognized.'; } } console.log( output );
參考: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.