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

我正在编写一个函数,以使用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 方法是否无法识别 []。


万千封印
浏览 144回答 1
1回答

婷婷同学_

简短的回答:是的,这是不同的。您的化简器需要在函数中返回一个值。参数的值等于调用最后一个 reduce 函数调用的最后一次返回。在第一次调用中,该参数等于对 reduce 函数调用(即 )的第二个参数中指定的初始值。currentcurrent[]显式返回支持的版本也可以解决此问题:currentfunction 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 bracketselements.map(element => element.length); // [8, 6, 7, 9]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript