有人可以用初学者的术语解释这个序数函数是如何工作的吗?

时间:2016-02-21 23:51:11

标签: javascript ordinal

var getOrdinal = function(n) {
var s = ["th", "st", "nd", "rd"],
v = n % 100;
return n + (s[(v - 20) % 10] || s[v] || s[0]);
};
console.log(getOrdinal(1));

3 个答案:

答案 0 :(得分:1)

首先,数字1-10和20-30,30-40等遵循相同的模式。青少年不遵循这种模式 - 11日,12日,13日,14日等,直到20岁。

v被设置为n的余数除以100 - 换句话说,传入的数字n的最后两位数。这是因为每一百的序数结尾是相同的。

计算扩展时,or语句中有三个子句 - 第一个评估的子句 - 通过索引到数组中,其值介于0和3(含)之间 - 将附加到传递的原始数字上。 / p>

让我们打破每一个:

s [(v - 20)%10] - 这通过从数字中减去20然后在除以10之后找到余数来处理数字超过20的情况。例如32计算结果为2并返回'nd'。如果数字不以1,2或3结尾或小于20,则该条款将不予评估,我们将检查下一条款

s [v] - 通过直接索引到数组中来分别得到'th','st','nd'或'rd'来处理数字为0,1,2或3的情况< / p>

s [0] - 最后这会处理所有其他数字

关键是要注意两件事:

  1. Javascript将数组中的无效索引评估为false
  2. 按顺序评估Ors,并在第一场比赛中停止检查
  3. HTH

答案 1 :(得分:0)

var s = ["th", "st", "nd", "rd"],

声明一个名为s的数组,其中包含4个字符串。

v = n % 100;

并且,另一个名为v who的值的变量是传入参数(n)模数100(余数为n / 100)的结果

return n + (s[(v - 20) % 10] || s[v] || s[0]);

该函数应返回n +的计算值,以下第一个不计算为“falsy”值的数组元素(0,“”,undefined,null,false):v-20索引元素数组,数组的v索引元素或数组的第一个元素。

答案 2 :(得分:0)

可能会更好地修改代码

/

这将分别输出funky return语句的每个“部分” - 这样你就可以看到自己发生了什么