我有一个数组。该数组responses[1]
中的一个值是整数。此整数可以是1到您想要的任何数字。我需要得到整数中的最后一个数字,并根据该数字确定是否应该使用'st','nd','rd'或'th'结束数字。我怎么做?我试过了:
var placeEnding;
var placeInt = response[1]; //101
var stringInt = placeInt.toString();
var lastInt = stringInt.charAt(stringInt.length-1);
if (lastInt == '1'){
placeEnding = 'st';
} else if (lastInt == '2'){
placeEnding = 'nd';
} else if (lastInt == '3'){
placeEnding = 'rd';
} else {
placeEnding = 'th';
}
但这不起作用。每当我尝试打印placeEnding
时,无论是否应该是'st','rd'或'nd',它总是'th'。当我尝试打印placeInt
,stringInt
或lastInt
时,它们都打印为"
而不是数字。为什么会这样?当我稍后在脚本中打印responses[1]
时,我没有问题得到正确答案。
答案 0 :(得分:5)
你走了:
var ends = {
'1': 'st',
'2': 'nd',
'3': 'rd'
}
response[1] += ends[ response[1].toString().split('').pop() ] || 'th';
正如其他人所指出的那样,使用模数10更有效:
response[1] += ends[ parseInt(response[1], 10) % 10 ] || 'th';
但是,如果数字中包含小数,则会中断。如果您认为可能,请使用以前的解决方案。
答案 1 :(得分:4)
如果你想要的只是最后一位,只需使用模数运算符:
123456 % 10 == 6
无需为字符串转换或任何事情烦恼。
答案 2 :(得分:2)
在我的犀牛控制台中。
js> (82434).toString().match(/\d$/)
4
答案 3 :(得分:1)
获取lastInt的替代方法是:
var lastInt = parseInt(stringInt)%10;
switch lastInt {
case 1:
placeEnding = 'st';
break;
case 2:
placeEnding = 'nd';
break;
case 3:
placeEnding = 'rd';
break;
default:
placeEnding = 'th';
}
答案 4 :(得分:1)
我注意到我想在日期中使用st / nd / rd / th,并注意到10到20之间有一个例外第十一,第十二等等,所以我得出了这个结论:
if (n % 10 === 1 && (n % 100) - 1 !== 10) {
return "st";
} else if (n % 10 === 2 && (n % 100) - 2 !== 10) {
return "nd";
} else if (n % 10 === 3 && (n % 100) - 3 !== 10) {
return "rd";
}
return "th";