循环内的递归函数

2024-04-05

我一直在研究递归函数,并且开始或多或少地理解它们。当我遇到这个问题时,我正在参加一个免费的代码训练营挑战,但我不明白它。 for 循环内的递归函数:

function steamroller(arr) {
   var newArr = [];

    for (var i = 0; i < arr.length; i++) {
       //If (i)th element is an array
       if (Array.isArray(arr[i])) {
          newArr = newArr.concat(steamroller(arr[i]));
          console.log(newArr);
       } else {
          newArr.push(arr[i]);
       }
   }
   return newArr;
}
steamroller([1, [2],[3, [[4]]]]);
//returns [1, 2, 3, 4]

我很难理解的那句话是:

newArr = newArr.concat(steamroller(arr[i]));

在那条线上,newArr连接到什么?该函数在 .concat 方法内部再次调用,对吗?但是 for 循环会发生什么呢? concat 方法内部的函数调用是否强制循环退出?

这里有一个JSFiddle https://jsfiddle.net/Chirpizard/owgp0vcd/,我有每个newArr登录到控制台,但我什至无法遵循它。该数组的构建方式如下:

[1, 2]
[4]
[3, 4]
[1, 2, 3, 4] //Final

Thanks.


The steamroller函数需要循环遍历作为函数参数提供的数组中的索引,以确保可以看到数组的每个索引。

然而,原始数组有多个索引,而这些索引本身又可能包含多个索引,所有这些索引都需要依次循环。

致电给concat仅在循环的当前索引上完成,这意味着结果是当前索引的“压轴”表示。

一步步

  1. 原始数组被传递给函数:[1, [2],[3, [[4]]]]
  2. 循环从第一个索引开始:1,它不是一个数组,因此它被推送到结果数组中。
  3. 下一次循环迭代的索引是[2],它是一个数组,因此是递归的。
  4. 对函数的第一次递归调用接收[2]并迭代它。
  5. 此递归调用的第一次迭代发现索引为2,它不是数组,因此被推送到结果数组。
  6. ... 继续 ...

我们看到的是,当使用递归函数迭代嵌套数组时,无论嵌套如何,我们最终总是会获得内部整数值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

循环内的递归函数 的相关文章

  • 为什么我的反应路由器链接将我带到页面中间?

    我的网站上有很多链接 但只有一个可以执行此操作 它没有将我带到导航栏的顶部 而是转到内容的中间 知道为什么会这样吗 这是一个页面 其中有一个 map经历一些JSON 这是渲染div页面下方的文本元素 如果重要的话 这是一些可能相关的代码 路
  • 如何实时改变setInterval的速度

    我想知道如何实时更改 setInterval 的速度 例如 if score lt 10 repeater setInterval function spawnEnemy 1000 if score gt 10 repeater setIn
  • MailTo 从 Javascript

    我有一个链接按钮 用于从页面内容构建邮件 从 javascript 启动它而不打开空白窗口或干扰调用它的窗口的最佳方法是什么 function Email var sMailTo mailto var sBody var alSelecte
  • Angular UI select:从远程服务获取数据

    我正在使用角度用户界面选择 https github com angular ui ui select https github com angular ui ui select 我查看了演示的可用位置这个笨蛋 http plnkr co
  • 如果没有“new”,则无法调用类构造函数

    感谢这个问题已经被问过几次了 但是我遇到的几乎所有情况都是有人试图扩展非本地类的情况 我的情况有所不同 我有一个非常简单的基类 名为CObject如下 export class CObject extends BaseObject cons
  • 如何在不阻止触摸启动的情况下防止“过度滚动历史导航”?

    我正在实现基于滑动的导航 但我在使用 Chrome 时遇到了麻烦 当页面向右拖动时 会触发新实现的功能 过度滚动历史导航 从而导致跳回 到 历史 1 为了防止这种情况 我必须打电话 preventDefault on touchstart
  • 如何使 d3 饼图响应式?

    我有一个 PIE 图表 它工作正常 但我无法使其具有响应能力和可调整大小 我需要它与移动浏览器和 iPad 等兼容 div div
  • 检测 Google 验证码的挑战窗口何时关闭

    我正在使用谷歌隐形验证码 有没有办法检测挑战窗口何时关闭 我所说的挑战窗口是指您必须选择一些图像进行验证的窗口 目前 我在按钮上放置了一个旋转器 一旦单击按钮 就会呈现验证码挑战 无法向用户提示另一个质询窗口 我以编程方式调用渲染函数 gr
  • JavaScript 将键添加到数组中的每个值

    我下面有这个数组 它由一个简单的数组组成 我想要完成的是放一把钥匙id在每个数组值前面以实现类似的效果 id a id b id c id d 有没有一种简单的方法可以做到这一点 任何帮助将不胜感激 谢谢 var test a b c d
  • 如何在 React Native 上显示 SVG 文件?

    我想显示 svg 文件 我有一堆 svg 图像 但我找不到显示的方式 我尝试使用Image and Use的组成部分反应本机 svg https github com magicismight react native svg但他们不这样做
  • 如何将 arraylist 从 servlet 传递到 javascript?

    我通过在属性中设置数组列表并将其转发到 jsp 来从 servlet 传递数组列表 Servlet ArrayList
  • ES6继承:使用`super`访问父类的属性

    JavaScript 的super关键字 当我在 Chrome Babel TypeScript 上运行代码时 得到了不同的结果 我的问题是哪个结果是正确的 规范的哪一部分定义了这种行为 下面的代码 class Point getX con
  • Web组件中嵌套槽的内容不可见

    我有一个 Web 组件 它应该接受任意元素来包装其内容 虽然我可以在 Chrome 开发工具中看到插槽已正确分配 但 DOM 中什么也没有出现 以前有人见过这个问题吗 定义 class ExampleParent extends HTMLE
  • Javascript 浮点乘以 100 仍然有错误

    我有一个货币字段的文本输入 我在字段中输入 33 91 并在尝试使用 乘以 100 技术时得到以下结果 var curWth parseInt trans withdraw index val 100 3390 var curWth par
  • 如何在画布上所有其他内容后面绘制图像? [复制]

    这个问题在这里已经有答案了 我有一块画布 我想用drawImage在画布上当前内容后面绘制图像 由于画布上已经有内容 我正在使用字面上的画布来创建包含图像的画布 因此我无法真正先绘制图像 所以我无法使用drawImage在我呈现其余内容之前
  • 为什么 Node.js 应用程序只能从 127.0.0.1/localhost 访问?

    我本来打算教我的朋友介绍 Node 但是后来 我想知道为什么这个代码来自nodejs org var http require http http createServer function req res res writeHead 20
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • ng-include 和 ng-view 不同时加载

    下面是我的应用程序的结构 很简单 页眉和页脚是非常小的文件 而主页上的 ng view 要大得多 当我进入该页面时 我注意到了这一点 首先加载两个 ng include 然后 ng view 出现 页脚被推到底部 页脚闪烁大约 0 1 秒
  • 确定 Javascript 中的日期相等性

    我需要找出用户在 Javascript 中选择的两个日期是否相同 日期以字符串 xx xx xxxx 形式传递给该函数 这就是我需要的全部粒度 这是我的代码 var valid true var d1 new Date datein val
  • 如何在 Jquery/Javascript 中绑定模糊和更改,但只触发一次函数?

    我试图在选择元素更改时触发函数 由于 Ipad 在 on change 方面遇到问题 我还想绑定到 blur 这在 Ipad 上工作得很好 但是我不希望两个事件都触发该函数两次 所以我需要某种挂钩来确保两个事件是否都触发change and

随机推荐

  • “order by”在mysql中花费太多时间

    在 MySQL 中 查询中的 order by 花费了很多时间 SHOW PROFILES 显示排序过程所花费的时间 是否有任何设置 解决方法可以减少排序时间 如果您在排序依据的字段上没有索引 请添加一个 在某些情况下 MySQL 可以使用
  • 为什么使用 setattr() 和 getattr() 内置函数?

    通过阅读文档 我确切地了解了什么获取属性 http docs python org 3 3 library functions html getattr and 设置属性 http docs python org 3 3 library f
  • .htaccess 停止内部重定向

    首先这是我的目录结构 localhost p htaccess localhost p inc style css 我有这个片段 localhost p htaccess Options MultiViews FollowSymLinks
  • 为 Windows azure blob 设置 access-control-allow-origin 的任何方法

    我将 json blob 存储在 azure 上 并通过 XHR 访问它 在尝试加载这些 blob 时 我收到此错误 XMLHttpRequest 无法加载http myazureaccount blob core windows net
  • Django enctype="multipart/form-data" 未设置 POST 数据

    我需要发送文件和输入文本中的一些数据 这是我正在处理的表格
  • Python json.dumps TypeError:尝试从变量转换时,“set”类型的对象不可序列化,在硬编码时工作

    我尝试从 python 中的变量创建 JSON 字符串 但我得到了奇怪的行为 当我对 pro 对象进行硬编码时 结果格式良好 rev Package ID bbbbb nBuild nnumber 154 nBuilt n s ver st
  • 如何在 XPath 中选择布尔值节点?

    我有一个 XML 文档和关联的架构 它定义了几个具有以下属性的属性 xs boolean类型 的词汇值xs boolean are true false 1 and 0 所以看来要正确选择具有特定布尔值的属性 我必须编写如下内容 attri
  • ASIHTTPRequest 在 ios8 上导致应用程序崩溃

    这里我使用 JSON 来解析数据ASIHTTPRequest相同的代码在我的较低版本的 iOS 上运行良好 iOs7及以下 但我无法在我的 iOS 8 设备上运行它 日志越来越好 但应用程序崩溃了 可能从服务器得到较晚的回复 它不应该因延迟
  • 展开R公式

    这可能看起来是一个简单的问题 但是有没有快速而可靠的方法来扩展像这样的公式 f formula y a b to y a b ab 我会尝试这个 f y a b reformulate labels terms f f 2 y a b a
  • 使用 HTTP 身份验证和 maven-jaxb2-plugin 生成 WSDL 架构

    我想使用 jaxb2 插件生成可从安全 URL 访问的 WSDL 使用用户 ID 和密码进行基本身份验证 我应该在哪里指定生成架构的凭据 如果不提供它们 我会在架构生成过程中收到一个 401 错误
  • 关于 WCF 通道的困惑

    我对代理和通道感到困惑 根据我的阅读 WCF 客户端使用代理通过一系列通道传递消息 每个通道负责特定的任务 例如一个通道对消息进行编码 另一个通道对其进行加密 当我看到下面的代码时 我的困惑开始了 When proxy MyMethod 叫
  • C++ 异常处理增加了多少占用空间

    这个问题对于嵌入式开发尤其重要 异常处理为生成的二进制输出增加了一些占用空间 另一方面 毫无例外 错误都需要以其他方式处理 这需要额外的代码 最终也会增加二进制大小 我对你的经历很感兴趣 尤其是 您的编译器为异常处理添加的平均占用空间是多少
  • php 中 mysql 的程序实现和面向对象实现有何区别? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Automapper、MapFrom 和 EF 动态代理

    我一直在尝试将域对象映射到报表视图模型 在测试中一切都很顺利 我伪造了实体框架代码并使用构建器返回完全填充的 pocco 对象 现在我实际上正在访问数据库并返回数据 我看到一些奇怪的动态代理类型错误 这是我的代码示例 public clas
  • Android 可用的 mime 类型?

    经过多次在线搜索 我找不到一个地方可以告诉我 Android 应用程序中不同类型媒体的每种现有 MIME 类型 以下是我所知道的存在且有效的 For Text text plain For Image image jpeg image bm
  • 为什么在asp.net mvc中会话超时后jquery ajax调用失败?

    当我的会话变量中有一个值时 我的ajax调用可以正常工作 但是当会话超时时 它似乎无法返回空的json结果 public JsonResult GetClients int currentPage int pageSize if Sessi
  • Java 编译器用 + 连接替换 StringBuilder

    下面是一些简单的 Java 代码 String s new StringBuilder append a append b append c toString 我使用 JRE 1 6 对其进行编译 并在反编译的类文件中观察到以下内容 Str
  • Woocommerce - 如何删除产品列表上的“添加到购物车”按钮

    我想删除产品列表页面上的 添加到购物车 按钮 我希望它出现的唯一地方是单个产品页面 谁能建议我在哪里可以找到删除它 我无法从文档中获得任何帮助 目前该按钮出现在每个列表下方 我不知道如何从 WooCommerce 执行此操作 但使用以下代码
  • 运算符优先级和三元运算符

    我在 C 中遇到了问题 include
  • 循环内的递归函数

    我一直在研究递归函数 并且开始或多或少地理解它们 当我遇到这个问题时 我正在参加一个免费的代码训练营挑战 但我不明白它 for 循环内的递归函数 function steamroller arr var newArr for var i 0