有人可以分解这个匿名函数并解释一下吗?

Can someone break this anonymous function down and explain?

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

这将打印一个数字数组,'n' 是其数字根。我想知道这是如何通过上面给出的这个功能完成的?

感谢您的回答

让我们看看...

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

  2. && - 如果 +n 不是 0NaN 其他虚假值,则函数继续执行,否则 returns 这个虚假值

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

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

  5. .map(_=>n+=9) - 用 n+9 替换数组中的每个数字,并为下一项 [=] 增加 n9 的值25=]

所以对于 n = 1 你最终得到:[10, 19, 28, 37, 46, 55, 64, 73, 82, 91]

您可以按如下方式一步一步分解:

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