当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在javascript中递归使用reduce()方法?》经验,为你挑选了1个好方法。

问题是使用reduce()来操作数组数组并返回没有子数组的同构数组.例如 - [1,2,[3,[4,5]]]将返回[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],返回的对象是[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));

这给了我错误

未捕获的TypeError:[object Array]不是函数(匿名函数)@ Flattening.html:27

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

我理解问题来自于reduce(我认为)只能使用定义为参数的函数.有没有人有一个解决方案,所以我得到[1,2,3,4,5,6,78,9,10]因为我的结果解决了reduce()的限制,除非我错过了什么?



1> Nina Scholz..:

通过测试数组和递归调用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('
' + JSON.stringify(array.reduce(flat, []), 0, 4) + '
');
推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有