草庐IT

Recursion

全部标签

javascript - 从嵌套数组中提取子数组

我有嵌套数组数据,我想提取所有嵌套数组作为它们父级的兄弟。我非常接近,但我在结果中得到了一个额外的空数组,我无法弄清楚它来自哪里或如何摆脱它。注意:我真的很想了解为什么会发生这种情况以及如何在我的函数中摆脱它,而不仅仅是.filter(arr=>arr.length)在我的结果列表中。这是我目前的尝试:vararrs=[[1,2,[3,4],5],[6,[7,8,9,[10,11]]],[12,13],[[14,15],[16,17]],[[1],4,[1,1],4]];//DesiredOutput//[//[1,2,5],//[3,4],//[6],//[7,8,9],//[10,

javascript - 如何在返回单个对象时递归使用 Array.prototype.find()?

我试图解决的更大问题是,鉴于此数据:vardata=[{id:1},{id:2},{id:3},{id:4,children:[{id:6},{id:7,children:[{id:8},{id:9}]}]},{id:5}]我想创建一个返回{id:id}的函数findById(data,id)。例如,findById(data,8)应该返回{id:8},而findById(data,4)应该返回{id:4,children:[...]}.为了实现这一点,我递归地使用了Array.prototype.find,但是当return将对象混合在一起时遇到了麻烦。我的实现返回特定对象的路径。例

Javascript递归数组展平

我正在练习并尝试编写一个递归数组展平函数。代码在这里:functionflatten(){varflat=[];for(vari=0;i问题是,如果我向那里传递一个数组或嵌套数组,我会收到“超出最大调用堆栈大小”错误。我做错了什么? 最佳答案 问题是你如何传递数组的处理,如果值是一个数组那么你一直调用它导致无限循环functionflatten(){varflat=[];for(vari=0;i演示:Fiddle这是一个更现代的版本:functionflatten(items){constflat=[];items.forEach(

javascript - Firefox 中有时出现 "too much recursion"错误?

我正在用javascript做一件非常简单的事情,基本上只有有时javascript会给我一个“递归太多”的错误。有问题的代码:if(pageLoad===undefined){varpageLoad=function(){};}varpageLoad_uniqueid_11=pageLoad;varpageLoad=function(){pageLoad_uniqueid_11();pageLoad_uniqueid_12();};varpageLoad_uniqueid_12=function(){alert('pageLoad');};$(document).ready(func

javascript - 查找所有文本节点

我正在尝试编写一个小书签,它对文档中所有可见文本实例调用函数doSomething(textNode)。doSomething(),只是为了好玩,通过替换传递给它的textNode的textContent,将每个单词替换为“derp”。但是,这会使一些空的文本节点中包含单词,因此会破坏网页。有没有办法只在每个包含单词的textNode上调用doSomething()?functionrecurse(element){if(element.childNodes.length>0)for(vari=0;i 最佳答案 改变这个...ele

javascript - 邻接表的树结构

我正在尝试从具有父ID的平面数组生成分层树对象。//`parent`representsanIDandnotthenestinglevel.varflat=[{id:1,name:"Business",parent:0},{id:2,name:"Management",parent:1},{id:3,name:"Leadership",parent:2},{id:4,name:"Finance",parent:1},{id:5,name:"Fiction",parent:0},{id:6,name:"Accounting",parent:1},{id:7,name:"ProjectMa

javascript - 使用递归 promise 阻止内存泄漏

如何使用Qlibrary创建JavaScriptPromise的递归链?以下代码无法在Chrome中完成://Don'tkeeptrackofapromisesstackfordebugging//ReducesmemoryusagewhenrecursingpromisesQ.longStackJumpLimit=0;functiondo_stuff(count){if(count==1000000){return;}if(count%10000==0){console.log(count);}returnQ.delay(1).then(function(){returndo_stu

javascript - 使用迭代样式在 JavaScript 中克隆对象

是否可以重写以下JavaScript递归函数以使其更快?functionclone_recursive(object){varresult={};for(varkeyinobject){varvalue=object[key];if(typeofvalue==='object'){result[key]=clone_recursive(value);}else{result[key]=value;}}returnresult;}我以迭代的方式重写了它,但它没有获得任何性能,事实上速度下降了≈20%。functionclone_iterative(object){varresult={}

javascript - 递归 'setTimeout' 函数调用最终会杀死 JS 引擎吗?

假设我有一些数据需要大约每10秒从服务器获取一次。我会有一个通过AJAX获取数据的函数,然后调用setTimeout再次调用这个函数:functionGetData(){$.ajax({url:"data.json",dataType:"json",success:function(data){//dosomthingwiththedatasetTimeout(GetData,10000);},error:function(){setTimeout(GetData,10000);}});}如果有人让网页整天打开,它可能会收到数千次递归函数调用。我不想使用setInterval,因为它没

javascript - 如何检查物体的深度?

我正在开发一个具有可变深度的权限系统;根据页面的复杂程度,可能会有更多或更少的级别。我搜索了StackOverflow以查找之前是否有人问过这个问题,但找不到。如果我有这个对象:{foo:{bar:{baz:'baa'}}}我需要它返回3,它有3个级别。对于这个对象:{abc:'xyz'}它必须是1。这是我目前所拥有的:utils.depthOf=function(object,level){//Returnsanintofthedeepestlevelofanobjectlevel=level||1;varkey;for(keyinobject){if(!object.hasOwnP