簡體   English   中英

開關盒內組合

[英]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 ,我的鹽將是AllPapayas 我試着像這樣組合它:

 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; }

但這不能正常工作。 我總是在結果中得到AllOranges 有沒有辦法用一個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 - 如果沒有這個,你也會輸出MangoesPapayas

第一個微不足道的解決方法是在所有開關情況下復制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' = All - Oranges Mangoes and Papayas
  • 輸入:“橙子”= Oranges
  • 輸入:'MangPap' = 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM