为了账号安全,请及时绑定邮箱和手机立即绑定

大括号是否更改了此函数的读数

大括号是否更改了此函数的读数

万千封印 2022-09-29 16:34:44
我正在编写一个函数,以使用concat和 reduce方法从雄辩的javascript中扁平化数组。当我像这样编写代码时:    function flatten(args){       return args.reduce((current,i) =>{           current.concat(i);       },[] );   }   let arrays = [[1, 2, 3], [4, 5], [6]];   console.log(flatten(arrays));我得到以下错误:current.concat(i);                ^TypeError: Cannot read property 'concat' of undefined但是当我摆脱本节中的大括号“{}”时:以前:return args.reduce((current,i) =>{        current.concat(i);    },[] );后:return args.reduce((current,i) =>        current.concat(i)    ,[] );}它打印出来就好了。当查找初始化为 0 的总和时,此格式工作正常。当 [] 位于大括号 “{}” 内时,concat 方法是否无法识别 []。
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

简短的回答:是的,这是不同的。您的化简器需要在函数中返回一个值。参数的值等于调用最后一个 reduce 函数调用的最后一次返回。在第一次调用中,该参数等于对 reduce 函数调用(即 )的第二个参数中指定的初始值。currentcurrent[]


显式返回支持的版本也可以解决此问题:current


function flatten(args) {

   return args.reduce((current, i) => {

       return current.concat(i);

   }, []);

}

如果没有大括号,返回将隐式返回由 concat 表达式(一个新数组)返回的值。


有关箭头函数如何工作的更多信息,请查看 MDN 的箭头函数一文。具体来说,本节讨论它是如何暗示的:


(param1, param2, …, paramN) => expression

// equivalent to: => { return expression; }

以及本节:


// When the only statement in an arrow function is `return`, we can remove `return` and remove

// the surrounding curly brackets

elements.map(element => element.length); // [8, 6, 7, 9]


查看完整回答
反对 回复 2022-09-29
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信