I'm going to optimize javascript code in which I seen old code is like below,
var emcont = $('#emcont').val();
numericMatch = emcont.match(/\d/g);
if (numericMatch == null) {
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
} else if (emcont.length != 14) {
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
} else if (numericMatch.length && numericMatch.length != 10) {
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
} else {
$('#msg_emcont').html('').hide();
}
I going to convert if-else conditions into switch conditions, but the problem in the above code is 2nd condition validation used emcont variable so I can't directly use numericMatch in switch statement. So I decided used emcont variable directly in the switch statement like the below code,
switch(emcont)
{
case emcont.match(/\d/g) == null:
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
break;
case emcont.length != 14:
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
break;
case emcont.match(/\d/g).length && emcont.match(/\d/g).length != 10:
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
break;
default:
$('#msg_emcont').html('').hide();
break;
}
In used regex in switch case validation, so i need to know which code better in performance wise.
Please do not abuse side effects of switch(true) which is what you meant
This is DRY and easier to read
var emcont = $('#emcont').val();
const numericMatch = emcont.match(/\d/g);
$('#msg_emcont')
.html(getMessage('msg_emcont'))
.toggle(
numericMatch == null ||
emcont.length != 14 ||
(numericMatch.length && numericMatch.length != 10)
)
You might even consider to move
$('#msg_emcont').html(getMessage('msg_emcont'))
to the page load so it is only done once