如何在 javascript 中递归使用 reduce() 方法?

How do I recursively use the reduce() method in javascript?

问题是使用 reduce() 对数组数组进行操作,return 没有子数组的同构数组。 例如 - [1,2,[3,[4,5]]] 将 return [1,2,3,4,5].

这是有效的代码,考虑到子数组本身不是另一个数组数组-

var a = [3,[4,[5,[6,7]]]];
var b = 8;
var c = [9,10];
var x = []

var arr = [1,2,a,b,c];
arr = [1,2,3,4,c];

console.log(arr.reduce(function oneArray(a,b)
    {
        return a.concat(b); 
    },x))

请注意,我更改了我的 arr 数组,因为代码不适用于第一个 arr 数组,即 [1,2,a,b,c]。 对于 arr [1,2,3,4,c],对象 returned 是 [1,2,3,4,9,10]

这是我尝试使其适用于第一个 arr-

function oneArray(a,b)
    {
        if (typeof b == "object")
            b = b.reduce(oneArray(x,y),[]);
        return a.concat(b); 
    }

    console.log(arr.reduce(oneArray(a,b),x));

这给了我错误

未捕获类型错误:[对象数组] 不是函数(匿名函数)@Flattening.html:27

它将我的函数 oneArray 解释为数组而不是函数

我理解这个问题是因为 reduce 可以(我认为)只能与定义为参数的函数一起工作。 有没有人有解决方案,以便我得到 [1,2,3,4,5,6,78,9,10] 作为解决 reduce() 限制的结果,除非我错过了什么?

通过数组测试和 reduce 函数的递归调用来减少。

编辑:感谢 Jonathan Lonowski 的提示。

function flat(r, a) {
    if (Array.isArray(a)) {
        return a.reduce(flat, r);
    }
    r.push(a);
    return r;
}

var array = [3, [4, [5, [6, 7]]]];
document.write('<pre>' + JSON.stringify(array.reduce(flat, []), 0, 4) + '</pre>');