了解箭头函数参数

And*_*ato 2 javascript arrays loops ecmascript-6

我刚刚练习了一个标准的基本白板问题:创建一个由 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;
}

Run Code Online (Sandbox Code Playgroud)

新的语法解决方案:

const arr = n => Array.from({length: n}, (_, i) => i);

Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 5

mapper 函数Array.from可以接受的第一个参数表示正在迭代的当前元素。也就是说,例如,从一个类似数组的长度集合中3,该参数将为arrLike[0], or arrLike[1], or arrLike[2]

如果集合中的那个点没有任何元素,比如这里,那么访问这些索引将返回undefined

const arr = n => Array.from({length: n}, (_, i) => {
  console.log(_);
  return i;
});

arr(3);
Run Code Online (Sandbox Code Playgroud)

下划线只是一个变量名。您可以随意定义它。调用一个未使用的参数是一个常见的约定_,但这只是一个约定,而不是语法规则。

由于映射器函数只关心为了构造新数组而迭代的当前索引,因此它定义了第二个参数i,然后立即返回它。(Array.from可以迭代具有length属性的任何对象,从0length - 1。即使这些属性实际上不存在于对象上,索引,第二个参数,仍然会从 0 递增到length - 1。)