Как вы Javascript charAt () целое число? - PullRequest
1 голос
/ 17 января 2012

У меня есть массив.Одно из значений в этом массиве 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, это всегда было 'th', независимо от того, должно ли это быть 'st', 'rd' или 'nd'.Когда я попытался напечатать placeInt, stringInt или lastInt, все они печатались как " вместо числа.Почему это так?Когда я печатаю responses[1] позже в сценарии, у меня нет проблем с получением правильного ответа.

Ответы [ 5 ]

5 голосов
/ 17 января 2012

Вот, пожалуйста:

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';

Однако, это сломается, если числоимеет десятичную дробьЕсли вы думаете, что это возможно, используйте предыдущее решение.

4 голосов
/ 17 января 2012

Если все, что вам нужно, это последняя цифра, просто используйте оператор модуля: 123456 % 10 == 6
Не нужно беспокоиться о преобразованиях строк или чем-то еще.

2 голосов
/ 17 января 2012

В моей консоли носорога.

js> (82434).toString().match(/\d$/)
4
1 голос
/ 10 февраля 2015

Я заметил, что хочу использовать 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";
1 голос
/ 17 января 2012

Альтернативный способ получить 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';
}
...