我对使用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));
答案 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));