javascript - 了解箭头函数参数

标签 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;
}

新的语法解决方案:

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 属性的任何对象,从 0length - 1。甚至如果对象上实际不存在这些属性,则第二个参数索引仍将从 0 递增到length - 1。)

关于javascript - 了解箭头函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61962263/

相关文章:

mysql - 外部循环不起作用

loops - 为什么 Vector3 不更新 Unity3d

javascript - 带有 Node.js 版本的 Angular Cli 和 Ionic 3

javascript - 使用 Promise.all 获取基于名称的结果的最佳 es6 方法

Java arraylist 找不到构造函数,使用 arrays.aslist

php - 将多维数组拆分为两个

javascript - 与数组字符串一起使用时突出显示文本插件中断

javascript - 我的 API 路线不起作用; NodeJS

C++更改错误数组的值

C GPIO for 循环