简体   繁体   English

在 JavaScript 中使用 reduce 来展平阵列

[英]using reduce to flatten array in JavaScript

I'm getting a little confused with using reduce.我对使用reduce有点困惑。

it's array.reduce((accumulator, value) => do something with accumulator, why is this returning back an empty array?它是 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));

The flatten(v) returns an array, but you're not doing anything with it currently. flatten(v)返回一个数组,但您目前没有对它做任何事情。 Try pushing the spread array into the accumulator instead:尝试将扩展数组推入累加器:

 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));

Or, you can use concat , and only use the conditional operator when you need the entire thing to resolve to an expression (don't use it as an alternative to if / else ):或者,您可以使用concat ,并且仅在需要将整个事物解析为表达式时才使用条件运算符(不要将其用作if / else的替代):

 let a = [ [1,2], [ [3,4] ], [ [[5],[6]] ] ]; const flatten = arr => arr.reduce((a, v) => { if (v instanceof Array) { return a.concat(flatten(v)) } else { a.push(v); return a; } }, []) console.log(flatten(a));

 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));

let array = [[2, 4, 6, 8], [10, 12, 14], [16, 18, 20, 22]]

const flatten = array.reduce((a, b) => {
  return a.concat(b)
})

console.log(flatten)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM