onaikepo
onaikepo

Reputation: 37

Javascript switch case keeps skipping to the default case

My Switch case keeps on going to default.

The condition is from the intersectionWord which outputs a specific keyword from an array which matches up to a word in the trigger word array aka an intersectionWord.

const TriggerWord = ["weather", "add", "multiply", "divide", "subtract", "hi", "hello",];
const intersectionWord = TriggerWord.filter(element => request.requestContent.includes(element));

And the objective was to pass that trigger word into the switch statement to evaluate if any of those cases match up. If they do match up it should output an alert. But currently it just seems to go straight to the default case every time.

I don't know where it is going wrong.

 switch (intersectionWord) {
        case TriggerWord[0].toString:
            alert("Checking the weather");
            break;
        case TriggerWord[1].toString:
            alert("Doing the math");
            break;
        case TriggerWord[2].toString:
            alert("Doing multiplication");
            break;
        case TriggerWord[3].toString:
            alert("Doing the division");
            break;
        case TriggerWord[4].toString:
            alert("Doing the subtraction");
            break;
        case TriggerWord[5].toString:
            alert("Just saying Hello");
            break;
        case TriggerWord[6].toString:
            alert("Just saying Hello");
            break;

        default:
            alert("I couldn't find a TriggerWord");
    }

Upvotes: 0

Views: 81

Answers (1)

Barmar
Barmar

Reputation: 781255

As noted in the comments, there are two problems with your code:

  • You're missing the () after .toString so it will call the function; also, it's not necessary to use .toString(), since they're already strings.
  • intersectionWord is an array, so it will never be equal to any of the strings in TriggerWords.

Instead of the switch/case statement, consider using an object:

const messages = {
    weather: "Checking the weather",
    add: "Doing the math",
    multiply: "Doing multiplication",
    ...
}

Then you can loop over intersectionWords, looking up the corresponding message:

intersectionWords.forEach(word => alert(messages[word]))

Or you could combine them all into a single message:

let actions = intersectionWords.map(word => messages[word]).join(", ");
if (actions) {
    alert(actions);
} else {
    alert("No matching activity");
}

Upvotes: 2

Related Questions