我有一个函数,它接收一个缩写的月份名称,并返回它的数值,例如五月返回5。
或者说它应该是这样的。问题是无论我怎么尝试,字符串比较总是失败。
var monthNames = [
"JAN", "FEB", "MAR",
"APR", "MAY", "JUN", "JUL",
"AUG", "SEP", "OCT",
"NOV", "DEC"
];
function getMonthNum(val) {
for (var i = 0; i < monthNames.length; i++) {
if (val.toUpperCase() == monthNames[i].toUpperCase()) {
return parseInt(i + 1);
}
}
return 0;
}
如果传入的val是May,它永远不会通过 "MAY"=="MAY "的比较,每次都失败。
如何让 "MAY"=="MAY"?
我修改了代码,把两个值都转换成字符串,修剪了,去掉了空格,什么都不行。
函数最终变成了下面的样子,但IT STILL FAILS并返回0,不知为何 "MAY "永远不等于 "MAY"。
function getMonthNum(val) {
var mon = val.toUpperCase().trim().toString().replace(/\s/g, ' ');
for (var i = 0; i < monthNames.length; i++) {
var check = monthNames[i].toUpperCase().trim().toString().replace(/\s/g, ' ');
if (String(mon) == String(check)) {
return parseInt(i + 1);
}
}
return 0;
}
由于你不能对输入的数据有信心,你可以尝试在你的函数中删除所有非字母。
val.replace(/[^A-Za-z]/gi, '')
MAY
我建议使用 indexOf
?
var monthNames = [
"JAN", "FEB", "MAR",
"APR", "MAY", "JUN", "JUL",
"AUG", "SEP", "OCT",
"NOV", "DEC"
];
function getMonthNum(val) {
return monthNames.indexOf(val.toUpperCase()) + 1
}
console.log(getMonthNum("MAY")); //5
console.log(getMonthNum("maY")); //5
console.log(getMonthNum("JUN")); //6
console.log(getMonthNum("wrong")); //0