有人可以打破这个匿名功能并解释一下吗?

时间:2017-05-30 12:52:13

标签: javascript anonymous-function

n => +n && [...1e9+''].map(_ => n += 9);

这会打印一系列数字' n'是一个数字根。我想知道通过上面给出的这个功能如何做到这一点?

感谢您的回答

2 个答案:

答案 0 :(得分:7)

让我们看看......

  1. +n - 将输入转换为数字

  2. && - 如果+n不是0NaN或另一个假值,则函数继续运行,否则返回此假值

  3. 1e9+'' - 将此数字转换为字符串:"1000000000"

  4. [..."1000000000"] - 使用新的'点差'运算符用digits =>填充数组["1", "0", "0", "0", "0", "0", "0", "0", "0", "0"]

  5. .map(_=>n+=9) - 使用n+9替换数组中的每个数字,并为n增加9的值以用于下一个项目

  6. 因此对于n = 1,您最终得到:[10, 19, 28, 37, 46, 55, 64, 73, 82, 91]

答案 1 :(得分:2)

您可以按照以下步骤将其分解为一步:

n => +n && [...1e9+''].map(_ => n += 9);

n => +n && [...1000000000+''].map(_ => n += 9);

n => +n && ['1','0','0','0','0','0','0','0','0','0'].map(_ => n += 9);

n => +n && [n += 9,n += 9,n += 9,n += 9,n += 9,n += 9,n += 9,n += 9,n += 9,n += 9];

n => +n && [n+9, n+18, n+27, n+36, n+45, n+54, n+63, n+72, n+81, n+90];

这里令人困惑的是[...1e9+''],它只是一种令人困惑的方式来创建一个包含十个元素的数组,利用扩展符号...将字符串转换为数组的事实个别代码点。写Array.from({length: 10})会更清楚,在这种情况下,您可以使用第二个参数而不使用map,就像在Array.from({length: 10}, (v, i) => n + 9*(i+1))中一样。