我正在尝试完成这个程序,并遇到了一个我无法理解的问题。我想把数字数组改成一个序数计数器部分的字符串,我已经用这个程序完成了,我只想把最后一个值留给连接的',' (逗号空间)。我尝试使用if语句,但无法使其正常工作。
function getGetOrdinal(n) {
var s=["th","st","nd","rd"],
v=n%100;
return n+(s[(v-20)%10]||s[v]||s[0]);
}
var nums = [1, 2, 3, 4]
var n = "";
for ( var i = 0; i <= getGetOrdinal(4).length; i++ ) {
if ( n < getGetOrdinal(n) ) {
n += getGetOrdinal(nums[i]) + ', ';
console.log(n);
}
} // ['1st, 2nd, 3rd, 4th'] < ~ expected result
答案 0 :(得分:4)
你可以这样做:
var nums = [1, 2, 3, 4]
> undefined
nums.map(getGetOrdinal).join(', ')
> "1st, 2nd, 3rd, 4th"
答案 1 :(得分:3)
以下是两个选项:
一种方法是在<canvas id="canvas" width="600" height="400"></canvas>
循环中添加检查,只有当它不是循环的第一次迭代时才会预先加上一个逗号:
for
另一种选择是保持你的代码不变,但随后将逗号后面的字符串子串起来:
for (var i=0; i <= getGetOrdinal(4).length; i++) {
if (n < getGetOrdinal(n)) {
if (i > 0) {
n += ', ';
}
n += getGetOrdinal(nums[i]);
}
}
console.log(n);
答案 2 :(得分:2)
您可以使用Array.prototype.join
加入具有指定分隔符的数组:
function getGetOrdinal(n) {
var s = ["th","st","nd","rd"],
v = n % 100;
return n + (s[(v - 20) % 10] || s[v] || s[0]);
}
var nums = [1, 2, 3, 4];
var numsWithOrdinal = nums.map(getGetOrdinal);
var joined = numsWithOrdinal.join(', ');
console.log(joined);