我正在编写一个函数,以使用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]
添加回答
举报
0/150
提交
取消