大括号是否会改变这个函数的读法?

问题描述 投票:0回答:1

我写了一个函数,用concat和reduce方法从eloquent 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

但是当我把这部分的大括号"{}"去掉的时候:

before:

return args.reduce((current,i) =>{
        current.concat(i);
    },[] );

后:

return args.reduce((current,i) =>
        current.concat(i)
    ,[] );
}

打印出来就好了。当找到初始化为0的和时,这种格式工作得很好。当[]在大括号'{}'中时,concat方法是否不能识别。

javascript arrays concat reduce
1个回答
2
投票

简短的回答:是的,这是不同的。你的reducer需要在函数中返回一个值。的值。current 参数等于上次调用reduce函数的最后一次返回。在第一次调用中, current 参数等于 reduce 函数调用的第二个参数中指定的初始值(即)。[]).

明确返回 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]
© www.soinside.com 2019 - 2024. All rights reserved.