我刚刚练习了一个标准的基本白板问题:创建一个填充 0 到 n 整数的数组。我的解决方案有效,但其他一些帖子的语法非常不寻常。我真的很想理解它,但 MDN 文档对我帮助不大。我可以整理 {length: n}
的工作原理,但 (_, i) => i
看起来很奇怪。 _
是未命名函数,它接受 i
并返回 i
?但为什么会在那里呢?我希望得到任何帮助。
我的解决方案:
function arr(n){
var newArr = [];
for(var i = 0; i < n; i++){
newArr.push(i);
}
return newArr;
}
新的语法解决方案:
const arr = n => Array.from({length: n}, (_, i) => i);
最佳答案
映射器函数Array.from
可以接受的第一个参数指示正在迭代的当前元素。也就是说,例如,从长度为 3
的类似数组的集合中,该参数将为 arrLike[0]
或 arrLike[1]
,或arrLike[2]
。
如果集合中此时没有任何元素(如此处所示),则访问这些索引将返回 undefined
:
const arr = n => Array.from({length: n}, (_, i) => {
console.log(_);
return i;
});
arr(3);
下划线只是一个变量名。您可以根据需要定义它。将未使用参数称为_
是一种常见约定,但这只是一种约定,而不是语法规则。
由于映射器函数只关心当前正在迭代的索引以构造新数组,因此它定义了第二个参数i
,然后立即返回它。 (Array.from
可以迭代具有 length
属性的任何对象,从 0
到 length - 1
。甚至如果对象上实际不存在这些属性,则第二个参数索引仍将从 0 递增到length - 1
。)
关于javascript - 了解箭头函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61962263/