【问题标题】:Need explanation of some magic numbers需要解释一些神奇的数字
【发布时间】:2015-03-18 20:27:42
【问题描述】:

我在网上找到了这段代码

var b = '12-0-17-2-4-11-14';
var xxx = b.split('-').map(function (x) {
  var x = Number(x); 
  return String.fromCharCode(x < 26 ? 97 + x : 39 + x);
}).join('');
console.log(xxx);

存在:

0 = "a";
b = "1";
c = "2";
d = "3";

这段代码的输出将是'Marcelo',因为

12 = "M", 0 = "a",  17 = "r", 2 = "c", 4 = "e", 11 = "l", 14 = "o";

在将所有字符串转换为数字之前我都明白,但其余的我没听懂

fromCharCode(x &lt; 26 ? 97 + x : 39 + x) 在做什么?这段代码负责将数字与字母匹配。

谁能解释一下?

【问题讨论】:

  • 什么是/其余的/你不理解?
  • 我刚才说.. fromCharCode(x
  • 如果 x

标签: javascript function char


【解决方案1】:

fromCharCode 中的小计算用于将零索引字母表 (0:a,1:b,...25:z,26:A...) 映射到其正确的字符代码:

var output = '';

for(var i = 0; i < 52; i++){
    output += String.fromCharCode(i < 26 ? 97 + i : 39 + i);
}
alert(output);

如您所见: 字符代码65-90A-Z97-122a-z

因此,字母表的前半部分 (x &lt; 26) 已将 97 添加到其索引中,而后半部分 (x &gt;= 26) 已添加 65-26,即 39

【讨论】:

  • 非常感谢@Cerbrus!!
【解决方案2】:
(x < 26 ? 97 + x : 39 + x) 

只是从数字中形成字母的计算。

如果 x 的值(即字符串中的每个数字)小于 26,则 if 可以映射到字母表(字母表是 26 对吗?),则返回该字母表的字符代码,否则返回字符代码大写字母

【讨论】:

    【解决方案3】:

    它将数字转换为其 ASCII 表示形式。

    'A' 字符有 65 个十进制值,'a' 字符有 97 个十进制值。

    您可以在此处查看 ASCII 表:http://www.asciitable.com/

    【讨论】:

    • 公平点,但对于这种特殊情况,ASCII 就足够了(而 ASCII 是 unicode 的子集)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多