有人可以分解这个匿名函数并解释一下吗?
Can someone break this anonymous function down and explain?
n => +n && [...1e9+''].map(_ => n += 9);
这将打印一个数字数组,'n' 是其数字根。我想知道这是如何通过上面给出的这个功能完成的?
感谢您的回答
让我们看看...
+n
- 将输入转换为数字
&&
- 如果 +n
不是 0
或 NaN
其他虚假值,则函数继续执行,否则 returns 这个虚假值
1e9+''
- 将此数字转换为字符串:"1000000000"
[..."1000000000"]
- 使用新的 'spread' 运算符用数字填充数组 => ["1", "0", "0", "0", "0", "0", "0", "0", "0", "0"]
.map(_=>n+=9)
- 用 n+9
替换数组中的每个数字,并为下一项 [=] 增加 n
和 9
的值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))
.
n => +n && [...1e9+''].map(_ => n += 9);
这将打印一个数字数组,'n' 是其数字根。我想知道这是如何通过上面给出的这个功能完成的?
感谢您的回答
让我们看看...
+n
- 将输入转换为数字&&
- 如果+n
不是0
或NaN
其他虚假值,则函数继续执行,否则 returns 这个虚假值1e9+''
- 将此数字转换为字符串:"1000000000"
[..."1000000000"]
- 使用新的 'spread' 运算符用数字填充数组 =>["1", "0", "0", "0", "0", "0", "0", "0", "0", "0"]
.map(_=>n+=9)
- 用n+9
替换数组中的每个数字,并为下一项 [=] 增加n
和9
的值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))
.