Basic JavaScript counter

I am new to JavaScript and wondered if there is a more streamlined way of writing this code:

var choices = "ABBCD" // A string containing the letters A-D
var total = 0

function calculate() { // Iterate through choices and add to total depending on the letter
for (var i=0; i<choices.length; i++) {
if (choices[i]=="A") {
total+=1;
} if (choices[i]=="B") {
total+=2;
} if (choices[i]=="C") {
total+=3;
} if (choices[i]=="D") {
total+=4;
}
}
}

Good: Use if-elseif

You are calling 4 if statements with your code even if the 1st one is true. These are all mutually exclusive statements so use if-elseif

for (var i=0; i<choices.length; i++) {
if (choices[i]=="A") {
total+=1;
} else if (choices[i]=="B") {
total+=2;
} else if (choices[i]=="C") {
total+=3;
} else if (choices[i]=="D") {
total+=4;
}
}

Better: Use a switch statement

for (var i=0; i<choices.length; i++) {
switch (choices[i]) {
case 'A':
total += 1;
break;
case 'B':
total += 2;
break;
case 'C':
total += 3;
break;
case 'D':
total += 4;
break;
}
}

Best: Convert the character to its numeric equivalent using its ASCII value

for (var i = 0; i < choices.length; i++) {
//omitted validation that character is a legal value...
total += choices[i].charCodeAt(0) - 64;
}
• Love the idea of using ASCII, really helpful - thanks! – ggordon Sep 27 '16 at 19:05
• One more question, why is using the switch statement preferable? – ggordon Sep 27 '16 at 19:07
• @ggordon for most people it is easier to read a switch statement rather than a group of if-else statements. You are doing it based off the value in a variable as opposed to multiple conditions so a switch is well suited here. – yitzih Sep 27 '16 at 19:10