求助,这段代码什么意思

const flatten = arr => arr.reduce(
  function (a, b){
    a.concat(Array.isArray(b) ? flatten(b) : b),[]
  }
);

定义了一个flatten函数,使用的是es6的箭头函数,传进去一个数组,对这个数据进行reduce方法,后边的那个,[]是什么意思没明白。

阅读 2.2k
3 个回答

arr.reduce(callback, [initialValue])

reduce方法接受两个参数:

第一个参数是一个function,每次执行都回调用这个参数

第二个参数是初始值,就是那个[]。也就是说第一次调用function的时候,a[]

文档在这里

你的代码的问题:
刚执行了一次,发现少了点东西,应该是这样子:

const flatten = arr => arr.reduce(
  function (a, b){
    return a.concat(Array.isArray(b) ? flatten(b) : b)
  }, []
);

第二个参数可以省略,a就是arr[0];
不省略就是指定的值,如这里指定为[]。

这代码是错的

reduce的参数1 (reducer) 必须返回一个值 (下一个a)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题