【问题标题】:Using Map + Rest Operator (JavaScript)使用 Map + Rest 运算符 (JavaScript)
【发布时间】:2019-09-11 04:21:30
【问题描述】:

这个函数做了我想要它做的,但不是我期望它做的。我希望它创建两个数组,因为 ...args 创建了一个传递参数的数组,并且 map() 对它连接到的数组的每个值执行一些操作并将结果存储在一个新数组中。谁能告诉我为什么这个函数不创建两个数组?

let practiceFunc = (...args) => {
 let arr = args.map((e) => {
  return e + 1
 })
  
 return arr ;
} 

console.log(practiceFunc(1,2,3)) ;
document.write(practiceFunc(1,2,3)) ;

【问题讨论】:

  • 欢迎来到 SO! “不创建两个数组”是什么意思。你期望的输出到底是什么?
  • @ggorlen 我期待一个以数字 1 2 3 作为元素的数组,然后是一个由包含元素 2 3 4 的地图数组创建的数组
  • args[1,2,3] 数组,arr[2,3,4] 数组。两者都被创建,并且只返回arr
  • @ggorlen 是的,谢谢你,杰克帮助我理解了这一点,你只是在我的大脑中巩固了它

标签: javascript arrays function ecmascript-6


【解决方案1】:

它确实创建了两个数组,但你只使用一个 - arr,从函数返回的数组。 args 也被使用,但就像在 map 中使用的数组一样 - 您可以轻松地省略它并使用 arguments (但是为此需要 ES5 函数,因为箭头函数没有它们的 orwn arguments ,你必须使用Object.values提取值):

let practiceFunc = function() {
  let arr = Object.values(arguments).map((e) => {
    return e + 1
  });
  return arr;
}

console.log(practiceFunc(1, 2, 3));
document.write(practiceFunc(1, 2, 3));

【讨论】:

  • 哦,是的,你说得对,这就是函数能够使用 map() 方法的方式。我在 freeCodeCamp 的 es6 部分学到了这个,你确定我需要一个 es5 函数吗?
  • @iamlearningtocode 这是一项以 15 点声望解锁的特权,所以请不断提出好问题,您很快就会解锁该特权。
  • 当我问你是否确定需要 es5 功能时,我并没有不尊重你的意思。你说得对,实际上“箭头函数在其范围内没有自己的参数绑定;调用它们时不会创建任何参数对象。”
  • 没关系@iamlearningtocode - 提问是最好的学习方式。
  • "你可以很容易地忽略它并使用arguments" - 这没有任何意义。休息参数语法没有错,参数对象过时是有原因的。你应该使用Array.from()(尊重顺序)而不是Object.values()。但无论如何它都没有用 - 他们都创建了一个临时数组,所以这里什么都没有。
猜你喜欢
  • 2020-12-22
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
相关资源
最近更新 更多