在JavaScript中使用reduce扁平化数组

时间:2019-02-08 02:41:42

标签: javascript

我对使用reduce有点困惑。

它是array.reduce((accumulator,value)=>用累加器做些什么,为什么这会返回一个空数组?

let a = [
  [1,2],
  [
    [3,4]
  ],
  [
    [[5],[6]]
  ]
];

const flatten = arr => arr.reduce((a, v) => {
  v instanceof Array ? flatten(v) : a.push(v);
  return a;
}, [])


console.log(flatten(a));

2 个答案:

答案 0 :(得分:3)

flatten(v)返回一个数组,但是您目前不对其执行任何操作。尝试将传播数组推入累加器:

let a = [
  [1,2],
  [
    [3,4]
  ],
  [
    [[5],[6]]
  ]
];

const flatten = arr => arr.reduce((a, v) => {
  v instanceof Array ? a.push(...flatten(v)) : a.push(v);
  return a;
}, [])


console.log(flatten(a));

或者,您可以使用concat,并且仅在需要整个内容来解析为 expression 时才使用条件运算符(请勿将其用作{{ 1}} / if):

else

答案 1 :(得分:0)

let arr = [[1,2],[[3,4]],[[[5],[6]]]];

const flattenArr = (arr) => 
  arr.reduce((acc, val) => 
   Array.isArray(val) ? 
    acc.concat(flattenArr(val)) :
     acc.concat(val), []);
 
console.log(flattenArr(arr));