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


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

第一件事是数字 1-10 和 20-30、30-40 等遵循相同的模式。青少年不遵循模式 - 11日,12日,13日,14日等,直到20岁。

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

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

让我们逐一分解:

s[(v - 20) % 10] - 这处理了数字超过 20 的情况,方法是从数字中减去 20,然后在除以 10 后找到余数。例如,32 的计算结果为 2 并返回 'nd'。如果数字不以 1、2 或 3 结尾或小于 20,则此子句将不计算,我们继续检查下一个子句

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

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

关键是要注意两件事:

  1. Javascript 将数组中的无效索引评估为 false
  2. 按顺序评估 OR,检查在第一个匹配项时停止

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

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

v = n % 100;

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

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

该函数应返回 n 的计算值 n + 以下数组元素中的第一个,这些元素的计算结果不为 "falsy" 值(0, ", 未定义, null, false):数组的 v-20 索引元素、数组的 v 索引元素或数组的第一个元素。

,也许可以更好地理解代码

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

这将分别输出时髦的返回语句的每个"部分" - 因此您可以自己看到正在发生的事情

最新更新