我有一个非常简单的代码和功能。 我的问题是:我想选择一个给定数字的最后一个数字,但是当我想要使用它时,它根本无法工作。
我在这个函数中的工作是使数字更具可读性,例如: 如果数字 1 ,则输出必须为第一;如果数字 3 ,则输出必须为 3 ;如果数字 402 ,则输出必须 402nd 。
function humanizeChar (number) {
var lastOne = number.toString().split('').pop();
if (lastOne === 1) {
return number + 'st';
} else if (lastOne === 2) {
return number + 'nd';
} else if (lastOne === 3) {
return number + 'rd';
} else {
return number + 'th';
}
}
console.log(humanizeChar(1131)); // my output is 1131th
答案 0 :(得分:1)
您正尝试将字符串(lastOne
)与strict equality ===
的数字进行比较,以比较值和类型。您可以使用simple equality ==
或将数字更改为字符串:
function humanizeChar (number) {
var lastOne = number.toString().split('').pop();
console.log(lastOne);
if (lastOne === '1') {
return number + 'st';
} else if (lastOne === '2') {
return number + 'nd';
} else if (lastOne === '3') {
return number + 'rd';
} else {
return number + 'th';
}
}
console.log(humanizeChar(1131)); // my output is 1131th

答案 1 :(得分:1)
试试这个,似乎你将输出字符串与数字进行比较:
function humanizeChar (number) {
var lastOne = number.toString().split('').pop();
if (lastOne === "1") {
return number + 'st';
} else if (lastOne === "2") {
return number + 'nd';
} else if (lastOne === "3") {
return number + 'rd';
} else {
return number + 'th';
}
}
console.log(humanizeChar(1131)); // my output is 1131th
答案 2 :(得分:1)
您的问题是,您使用===
运算符将字符串与数字进行比较。正如this中对SO所述的非常好的答案所述:
标识(===)运算符的行为与等式(==)完全相同 运算符除了没有进行类型转换,类型必须是 同样被认为是平等的。
因此,您可以手动将lastOne
转换为数字(例如使用parseInt(lastOne)
),也可以使用==
运算符。或者,您可以将lastOne
与字符串文字('1'
,'2'
,...)进行比较。
答案 3 :(得分:1)
JavaScript比较运算符 运营商说明 ==等于 ===等值和相等的类型
在您的情况下,正确的运算符是'=='
答案 4 :(得分:1)
您需要对代码进行一些更改,如下所示: -
function humanizeChar (number) {
number = 7882; //just give some number for checking
var lastOne = number.toString().split('').pop();
//console.log(lastOne);
if (lastOne == 1) {
return number + 'st';
} else if (lastOne == 2) {
return number + 'nd';
} else if (lastOne == 3) {
return number + 'rd';
} else {
return number + 'th';
}
}
console.log(humanizeChar());
答案 5 :(得分:1)
我们还需要计算最后一位数的第二位数。例如,101应该是一百一而不是一百和一百。
//Improving from Ori Drori's answer
function humanizeChar (number) {
var numStrs = number.toString().split('');
var lastOne = numStrs.pop();
var isSeondFromLastGreaterThanZero = (numStrs.length > 0 && numStrs.pop() !== '0');
var suffix = "th";
if (!isSeondFromLastGreaterThanZero) {
if (lastOne === '1') {
suffix = 'st';
} else if (lastOne === '2') {
suffix = 'nd';
} else if (lastOne === '3') {
suffix = 'rd';
}
}
return number.toString() + suffix;
}
console.log(humanizeChar(1131)); // my output is 1131th
console.log(humanizeChar(1101)); // 1101st
console.log(humanizeChar(2)); // 2nd