Schakel instructie voor meerdere gevallen in Javascript

Ik heb meerdere cases nodig in Schakelinstructie in JavaScript, zoiets als:

switch (varName)
{
   case "afshin", "saeed", "larry":
       alert('Hey');
       break;
   default:
       alert('Default case');
       break;
}

Hoe kan ik dat doen? Als er geen manier is om zoiets in JavaScript te doen, wil ik een alternatieve oplossing kennen die ook de droog concept volgt .


Antwoord 1, Autoriteit 100%

Gebruik de fall-through-functie van de switchVerklaring. Een overeenkomende behuizing loopt tot een break(of het einde van de switchverklaring) is gevonden, zodat u het wilt schrijven zoals:

switch (varName)
{
   case "afshin":
   case "saeed":
   case "larry": 
       alert('Hey');
       break;
   default: 
       alert('Default case');
}

Antwoord 2, Autoriteit 7%

Dit werkt in regulier JavaScript:

function theTest(val) {
  var answer = "";
  switch( val ) {
    case 1: case 2: case 3:
      answer = "Low";
      break;
    case 4: case 5: case 6:
      answer = "Mid";
      break;
    case 7: case 8: case 9:
      answer = "High";
      break;
    default:
      answer = "Massive or Tiny?";
  }
  return answer;
}
theTest(9);

Antwoord 3, Autoriteit 3%

Hier is verschillende aanpak om de switchAltogether te vermijden:

var cases = {
  afshin: function() { alert('hey'); },
  _default: function() { alert('default'); }
};
cases.larry = cases.saeed = cases.afshin;
cases[ varName ] ? cases[ varName ]() : cases._default();

Antwoord 4

In Javascript om meerdere hoofdletters in een schakelaar toe te wijzen, moeten we different case without break inbetweenzoals hieronder aangegeven:

  <script>
      function checkHere(varName){
        switch (varName)
           {
           case "saeed":
           case "larry":
           case "afshin":
                alert('Hey');
                break;
          case "ss":
               alert('ss');
               break;
         default:
               alert('Default case');
               break;
       }
      }
     </script>

Zie voorbeeld klik op link


Antwoord 5

Als je ES6 gebruikt, kun je dit doen:

if (['afshin', 'saeed', 'larry'].includes(varName)) {
   alert('Hey');
} else {
   alert('Default case');
}

Of voor eerdere versies van JavaScript kunt u dit doen:

if (['afshin', 'saeed', 'larry'].indexOf(varName) !== -1) {
   alert('Hey');
} else {
   alert('Default case');
}

Houd er rekening mee dat dit niet werkt in oudere IE-browsers, maar u kunt de zaken vrij eenvoudig repareren. Zie de vraag bepalen of string in javascript in de lijst staatvoor meer informatie.


Antwoord 6

Ik vind dit prettig voor de duidelijkheid en een DROOG-syntaxis.

varName = "larry";
switch (true)
{
    case ["afshin", "saeed", "larry"].includes(varName) :
       alert('Hey');
       break;
    default:
       alert('Default case');
}

Antwoord 7

Mijn situatie leek op:

switch (text) {
  case SOME_CONSTANT || ANOTHER_CONSTANT:
    console.log('Case 1 entered');
  break;
  case THIRD_CONSTANT || FINAL_CONSTANT:
    console.log('Case 2 entered');
  break;
  default:
    console.log('Default entered');
}

De defaultcase altijdingevoerd. Als u een soortgelijk probleem met een switch-statement in meerdere gevallen tegenkomt, zoekt u dit:

switch (text) {
  case SOME_CONSTANT:
  case ANOTHER_CONSTANT:
    console.log('Case 1 entered');
  break;
  case THIRD_CONSTANT:
  case FINAL_CONSTANT:
    console.log('Case 2 entered');
  break;
  default:
    console.log('Default entered');
}

Antwoord 8

Door Stefano’s antwoordtoe te voegen en te verduidelijken, kunt u expressies om de waarden voor de voorwaarden in switch dynamisch in te stellen, bijv.:

var i = 3
switch (i) {
    case ((i>=0 && i<=5) ? i : -1):
        console.log('0-5');
        break;
    case 6: console.log('6');
}

Dus in uw probleem zou u iets kunnen doen als:

var varName = "afshin"
switch (varName) {
    case (["afshin", "saeed", "larry"].indexOf(varName)+1 && varName):
      console.log("hey");
      break;
    default:
      console.log('Default case');
}

Hoewel het zo veel is DROOG


Antwoord 9

In Node.js blijkt dat je dit mag doen:

data = "10";
switch(data){
    case "1": case "2": case "3": // Put multiple cases on the same
                                  // line to save vertical space.
        console.log("small");
        break;
    case "10": case "11": case "12":
        console.log("large");
        break;
    default:
        console.log("strange");
        break;
}

Dit zorgt in sommige gevallen voor veel compactere code.


Antwoord 10

Ik gebruik het als volgt:

switch (true){
     case /Pressure/.test(sensor): 
     {
        console.log('Its pressure!');
        break;
     }
     case /Temperature/.test(sensor): 
     {
        console.log('Its temperature!');
        break;
     }
}

Antwoord 11

Het hangt ervan af.Switchevalueert één keer en slechts één keer. Bij een match schieten alle volgende case statements tot ‘break’ in brand, ongeacht wat de case zegt.

var onlyMen = true;
var onlyWomen = false;
var onlyAdults = false;
 (function(){
   switch (true){
     case onlyMen:
       console.log ('onlymen');
     case onlyWomen:
       console.log ('onlyWomen');
     case onlyAdults:
       console.log ('onlyAdults');
       break;
     default:
       console.log('default');
   }
})(); // returns onlymen onlywomen onlyadults
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>

Antwoord 12

U kunt de operator ‘in‘ gebruiken…
Het is afhankelijk van de object/hash-aanroep, dus het is zo snel als JavaScript kan zijn.

// Assuming you have defined functions f(), g(a) and h(a,b)
// somewhere in your code,
// you can define them inside the object, but...
// the code becomes hard to read. I prefer it this way.
o = { f1:f, f2:g, f3:h };
// If you use "STATIC" code can do:
o['f3']( p1, p2 )
// If your code is someway "DYNAMIC", to prevent false invocations
// m brings the function/method to be invoked (f1, f2, f3)
// and you can rely on arguments[] to solve any parameter problems.
if ( m in o ) o[m]()

Antwoord 13

U kunt dit doen:

alert([
  "afshin", 
  "saeed", 
  "larry",
  "sasha",
  "boby",
  "jhon",
  "anna",
  // ...
].includes(varName)? 'Hey' : 'Default case')

of slechts een enkele regel code:

alert(["afshin", "saeed", "larry",...].includes(varName)? 'Hey' : 'Default case')

een kleine verbetering ten opzichte van het antwoord van ErikE


Antwoord 14

Ik zie dat er hier veel goede antwoorden zijn, maar wat gebeurt er als we meer dan 10 gevallen moeten controleren? Hier is mijn eigen aanpak:

function isAccessible(varName){
     let accessDenied = ['Liam', 'Noah', 'William', 'James', 'Logan', 'Benjamin',
                        'Mason', 'Elijah', 'Oliver', 'Jacob', 'Daniel', 'Lucas'];
      switch (varName) {
         case (accessDenied.includes(varName) ? varName : null):
             return 'Access Denied!';
         default:
           return 'Access Allowed.';
       }
    }
    console.log(isAccessible('Liam'));

Antwoord 15

Het probleem met de bovenstaande benaderingen is dat je de verschillende cases moet herhalen elke keer dat je de functie aanroept die de switchheeft. Een robuustere oplossing is om een kaartof een woordenboekte hebben.

Hier is een voorbeeld:

// The Map, divided by concepts
var dictionary = {
  timePeriod: {
    'month': [1, 'monthly', 'mensal', 'mês'],
    'twoMonths': [2, 'two months', '2 months', 'bimestral', 'bimestre'],
    'trimester': [3, 'trimesterly', 'quarterly', 'trimestral'],
    'semester': [4, 'semesterly', 'semestral', 'halfyearly'],
    'year': [5, 'yearly', 'annual', 'ano']
  },
  distance: {
    'km': [1, 'kms', 'kilometre', 'kilometers', 'kilometres'],
    'mile': [2, 'mi', 'miles'],
    'nordicMile': [3, 'Nordic mile', 'mil (10 km)', 'Scandinavian mile']
  },
  fuelAmount: {
    'ltr': [1, 'l', 'litre', 'Litre', 'liter', 'Liter'],
    'gal (imp)': [2, 'imp gallon', 'imperial gal', 'gal (UK)'],
    'gal (US)': [3, 'US gallon', 'US gal'],
    'kWh': [4, 'KWH']
  }
};
// This function maps every input to a certain defined value
function mapUnit (concept, value) {
  for (var key in dictionary[concept]) {
    if (key === value ||
      dictionary[concept][key].indexOf(value) !== -1) {
      return key
    }
  }
  throw Error('Uknown "'+value+'" for "'+concept+'"')
}
// You would use it simply like this
mapUnit("fuelAmount", "ltr") // => ltr
mapUnit("fuelAmount", "US gal") // => gal (US)
mapUnit("fuelAmount", 3) // => gal (US)
mapUnit("distance", "kilometre") // => km
// Now you can use the switch statement safely without the need
// to repeat the combinations every time you call the switch
var foo = 'monthly'
switch (mapUnit ('timePeriod', foo)) {
  case 'month':
    console.log('month')
    break
  case 'twoMonths':
    console.log('twoMonths')
    break
  case 'trimester':
    console.log('trimester')
    break
  case 'semester':
    console.log('semester')
    break
  case 'year':
    console.log('year')
    break
  default:
    throw Error('error')
}

Antwoord 16

Een van de mogelijke oplossingen is:

const names = {
afshin: 'afshin',
saeed: 'saeed',
larry: 'larry'
};
switch (varName) {
   case names[varName]: {
       alert('Hey');
       break;
   }
   default: {
       alert('Default case');
       break;
   }
}

Antwoord 17

Enkele interessante methoden. Voor mij is de beste manier om op te lossen het gebruik van .find.

U kunt een indicatie geven van wat de meerdere gevallen zijn door een geschikte naam in uw filterfunctie te gebruiken.

switch (varName)
{
   case ["afshin", "saeed", "larry"].find(firstName => firstName === varName):
       alert('Hey');
       break;
   default:
       alert('Default case');
       break;
}

Andere antwoorden zijn meer geschikt voor het gegeven voorbeeld, maar als je meerdere gevallen voor mij hebt, is dit de beste manier.


Antwoord 18

Een andere manier om meerdere gevallen in een switch-statement te doen, binnen een functie:

function name(varName){
  switch (varName) {
     case 'afshin':
     case 'saeed':
     case 'larry':
       return 'Hey';
     default:
       return 'Default case';
   }
}
console.log(name('afshin')); // Hey

Antwoord 19

Verander gewoon de switchvoorwaardebenadering:

switch (true) {
    case (function(){ return true; })():
        alert('true');
        break;
    case (function(){ return false; })():
        alert('false');
        break;
    default:
        alert('default');
}

Antwoord 20

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Example1</title>
    <link rel="stylesheet" href="css/style.css" >
    <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
    <script>
        function display_case(){
            var num =   document.getElementById('number').value;
                switch(num){
                    case (num = "1"):
                    document.getElementById("result").innerHTML = "You select day Sunday";
                    break;
                    case (num = "2"):
                    document.getElementById("result").innerHTML = "You select day  Monday";
                    break;
                    case (num = "3"):
                    document.getElementById("result").innerHTML = "You select day  Tuesday";
                    break;
                    case (num = "4"):
                    document.getElementById("result").innerHTML = "You select day  Wednesday";
                    break;
                    case (num = "5"):
                    document.getElementById("result").innerHTML = "You select day  Thusday";
                    break;
                    case (num = "6"):
                    document.getElementById("result").innerHTML = "You select day  Friday";
                    break;
                    case (num = "7"):
                    document.getElementById("result").innerHTML = "You select day  Saturday";
                    break;
                    default:
                    document.getElementById("result").innerHTML = "You select day  Invalid Weekday";
                    break
                }
        }
    </script>
</head>
<body>
    <center>
        <div id="error"></div>
        <center>
            <h2> Switch Case Example </h2>
            <p>Enter a Number Between 1 to 7</p>
            <input type="text" id="number" />
            <button onclick="display_case();">Check</button><br />
            <div id="result"><b></b></div>
        </center>
    </center>
</body>

Antwoord 21

je zou het zo kunnen schrijven:

switch (varName)
{
   case "afshin": 
   case "saeed": 
   case "larry": 
       alert('Hey');
       break;
   default: 
       alert('Default case');
       break;
}         

Antwoord 22

Voor mij is dit de eenvoudigste manier:

switch (["afshin","saeed","larry"].includes(varName) ? 1 : 2) {
   case 1:
       alert('Hey');
       break;
   default:
       alert('Default case');
       break;
}

Other episodes