你如何Javascript charAt()一个整数?

时间:2012-01-17 05:10:16

标签: javascript parsing integer

我有一个数组。该数组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'。当我尝试打印placeIntstringIntlastInt时,它们都打印为"而不是数字。为什么会这样?当我稍后在脚本中打印responses[1]时,我没有问题得到正确答案。

5 个答案:

答案 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";