当前位置: 首页 > 知识库问答 >
问题:

如何在JavaScript中递归地使用reduce()方法?[副本]

水渊
2023-03-14

问题是使用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]

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

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

我理解这个问题来自于这样一个事实,即reduce只能(我认为)使用定义为参数的函数。是否有人有一个解决方案,使我得到[1,2,3,4,5,6,78,9,10]作为我在reduce()的限制周围工作的结果,除非我错过了什么?

共有1个答案

涂羽
2023-03-14

Reduce使用数组测试和Reduce函数的递归调用。

编辑:乔纳森·洛诺夫斯基的暗示值得称赞。

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>');
 类似资料:
  • 我正在尝试修改一个插件(Pikaday)并添加我自己的一点点功能。 这个插件是使用原型系统构建的,我在其中添加了我的函数。 我很难理解的是如何实际触发这个方法。单击指定的元素不起作用。 如果有人感兴趣,这里有完整的代码(减去我的加法)。

  • 本文向大家介绍JavaScript中reduce()方法的使用详解,包括了JavaScript中reduce()方法的使用详解的使用技巧和注意事项,需要的朋友参考一下  JavaScript 数组reduce()方法同时应用一个函数针对数组的两个值(从左到右),以减至一个值。 语法 下面是参数的详细信息:     callback : 函数执行在数组中每个值     initialValue :

  • 我被要求检索树节点的每个叶节点。我很快想到我可以在一行中完成这项工作! 第一眼看上去很不错,但很快它就遇到了一个,如果树深度达到~10,这是我无法接受的。后来我开发了一个没有递归和流的实现(但我的大脑被烤坏了),但我仍然想知道是否有一种方法可以用流做递归,因为我发现不接触流内部是不可能做到的。它需要一个新的Op,比如来做到这一点,否则我必须每一步都将所有结果收集到中,然后再对该进行操作: 不像看起

  • 为了访问一个元素,我使用了以下命令如何通过使用xpath在javascript中使用与在out套件中仅使用xpath相同的功能

  • 问题内容: 如何在MySql中运行此查询? 它会显示如下错误消息: 问题答案: 该语句/方法适用于PostgreSQL和Sybase(我想可能还有更多),所以也许您可以看一下: http://www.artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html 它应该向您展示一些使用MySQL的方法(以及PHP中的一两个方法,我只知道它不在您的标签列

  • 所以我明白了如何使用一个递归方法,它有一些其他的返回类型,而不是作废。通常我会在同一个方法中再次调用相同的方法(在递归的情况下),同时在调用中递减或增加一些值以达到基本情况。然后在某个时候达到基本情况,问题就解决了,所以它开始返回每个调用的值。沿着这些路线。 但是 如果该方法的返回类型为void,那么您不能调用该方法,因为它不会/不能返回任何内容,该怎么办?我试着倒着写一个句子,我已经用for循环