Error Duplicate Const Declaration in Switch Case Statement

JavascriptEcmascript 6

Javascript Problem Overview


I have the following code and I get the error 'Duplicate Declaration query_url'.

  switch(condition) {
    case 'complex':
      const query_url = `something`;
      break;
    default:
      const query_url = `something`;
      break;
  }

I understand that query_url is getting declared twice which isn't right. But i don't know how to resolve this. Can someone please help on what should be the correct way to make this work?

Javascript Solutions


Solution 1 - Javascript

Try wrapping the cases in blocks:

switch(condition) {
  case 'complex': {
    const query_url = `something`;
    … // do something
    break;
  }
  default: {
    const query_url = `something`;
    … // do something else
    break;
  }
}

Solution 2 - Javascript

I personally prefer (and tend to abuse) the following in these sorts of cases:

const query_url = (()=>
{
     switch(condition)
           case 'complex': return 'something';
           default       : return 'something-else';
})();

(this requires ES6 or declaring "use-strict" in Node 4.x though)

Update: Alternatively, much more compact depending on if there is any logic there or if it's a simple assignment:

const query_url = {complex : 'something'}[condition] || 'something-else';

Also, of course, depends on the amount of outside-logic embedded in those switch statements!

Solution 3 - Javascript

if you need to redeclare the same variable in each case see @Bergi 's answer bellow

if query_url can have multiple values depending on the switch branch obviously you need a variable ( declare either with var or let ).

const is set once and stays that way.

example usage with let

let query_url = '';
switch(condition) {
  case 'complex':
    query_url = `something`;
    break;
  default:
    query_url = `something`;
    break;
}

Solution 4 - Javascript

You can use {} to scope your switch case.

For your case, you need to return the variable as long as the var exists and is accessible between curly braces:

 switch(condition) {
    case 'complex': {
      const query_url = `something`;
      return query_url;
    }
    default: {
      const query_url = `something`;
      return query_url;
    }
  }

If you won't use return, you must declare a let query_url above your switch statement.

Solution 5 - Javascript

Just put your switch in a function with some return statements :

var condition;
function aSwitch(condition){
switch(condition) {
    case 'complex':
      return 'something';
    default:
      return 'something';
  }
}
const query_url = aSwitch(condition);

Solution 6 - Javascript

const query_url={
  complex:'something complex',
  other:'other thing'
}[condition]

The drawback is,you can't have default with object,you need to have addition check of condition.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionasanasView Question on Stackoverflow
Solution 1 - JavascriptBergiView Answer on Stackoverflow
Solution 2 - Javascriptrob2dView Answer on Stackoverflow
Solution 3 - JavascripteltonkamamiView Answer on Stackoverflow
Solution 4 - JavascriptDisfigureView Answer on Stackoverflow
Solution 5 - JavascriptZakariaView Answer on Stackoverflow
Solution 6 - Javascriptsbk201View Answer on Stackoverflow