n => +n && [...1e9+''].map(_ => n += 9);
这会打印一系列数字' n'是一个数字根。我想知道通过上面给出的这个功能如何做到这一点?
感谢您的回答
答案 0 :(得分:7)
让我们看看......
+n
- 将输入转换为数字
&&
- 如果+n
不是0
或NaN
或另一个假值,则函数继续运行,否则返回此假值
1e9+''
- 将此数字转换为字符串:"1000000000"
[..."1000000000"]
- 使用新的'点差'运算符用digits =>填充数组["1", "0", "0", "0", "0", "0", "0", "0", "0", "0"]
.map(_=>n+=9)
- 使用n+9
替换数组中的每个数字,并为n
增加9
的值以用于下一个项目
因此对于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))
中一样。