JS递归查找对象数组的某个值?

代码如下

任意给一个对对象或者数组,通过遍历,递归查找其中是否存在某个值,
代码我已经写的差不多了,但是只支持单次查找。
因为flag重置问题没法解决。
如果在函数体最后if里面,flag= false,则涉及到对象中的数组的时候就不起作用了。因为if(flag)虽然执行了
但是**并没有跳出递归。**

所以我的问题就是怎么正确重置flag~
希望有朋友能够解惑~_**

<script type="text/javascript">
    var flag = false;
    function exitindata(data,item){
    if(data instanceof Array){
         var i = data.length;
         while(i--){
            if(flag){
                break;
            }
            if(data[i] === item){
                flag = true;
                break
            }else{
                if(data[i] instanceof Array || data[i] instanceof Object){
                         exitindata(data[i],item);
                    }
            }
         }
    }else{
        for(var key in data){
            if(flag){   
                break
            }
            if(data.hasOwnProperty(key) === true){
                 if(data[key]  === item){
                    flag = true;
                    break
                 }else{
                    if(data[key] instanceof Array || data[key] instanceof Object){
                         exitindata(data[key],item);
                    }
                 }
            }
        }
    }
    if(flag){
        return true;
    }else{
        return null
    }
} 
function find(item){
    var data = [9,
    {
        item1:50,
        item2:94,
        item3:[
            {
                cc: 9999,
                ff:9090
            }
        ]
    }
    ,65,1111,54,11,0,1,3,7,8,5,649,841];
    console.log(exitindata(data,item));
}
find(9090)
find(9091)
find(9999)
</script>

单次查找没问题。
多次就出问题啦

7个回答

之前回答感觉都好乱,再来一次吧。楼主程序里面是有递归终止条件的,并不是没有。没看到的可以仔细看看。
题主:你在exitindata函数中递归调用自身的时候,它有返回的值的,你用flag接住就可以了。同时,最后判断flag时,如果flag为true,要将flag重置为false,为下一次查找调用初始化flag

 <script type="text/javascript">
    var flag = false;
    function exitindata(data,item){
    if(data instanceof Array){
         var i = data.length;
         while(i--){
            if(flag){
                break;
            }
            if(data[i] === item){
                flag = true;
                break
            }else{
                if(data[i] instanceof Array || data[i] instanceof Object){
                         //此时用flag接住,如果递归找到,flag为true,否则为null
                                                flag=exitindata(data[i],item);
                    }
            }
         }
    }else{
        for(var key in data){
            if(flag){   
                break
            }
            if(data.hasOwnProperty(key) === true){
                 if(data[key]  === item){
                    flag = true;
                    break
                 }else{
                    if(data[key] instanceof Array || data[key] instanceof Object){
                         //此时用flag接住,如果递归找到,flag为true,否则为null
                                                flag=exitindata(data[key],item);
                    }
                 }
            }
        }
    }
    if(flag){
        //重置flag,为下次查找初始化flag
        flag=false;
        return true;
    }else{
        return null
    }
} 
function find(item){
    var data = [9,
    {
        item1:50,
        item2:94,
        item3:[
            {
                cc: 9999,
                ff:9090
            }
        ]
    }
    ,65,1111,54,11,0,1,3,7,8,5,649,841];
    console.log(exitindata(data,item));
}
</script>

public static long fac(int n){
//递归头,如果没有递归头,递归函数将陷入死循环
if(n==1){
return 1;
}else{//递归体
return n*fac(n-1);
}

}
//正在学java 没学js,但愿对你有帮助。我看你if  或else 中都在调用 自己,这样肯定有问题。
VC_August
VC_August 问题找到了,楼下正解,谢谢你的回答~~
大约 3 年之前 回复

题主:你在exitindata函数中递归调用自身的时候,它有返回的值的,你用flag接住就可以了。同时,最后判断flag时,如果flag为true,要将flag重置为false。
代码改动如下:
<br> var flag = false;<br> function exitindata(data,item){<br> if(data instanceof Array){<br> var i = data.length;<br> while(i--){<br> if(flag){<br> break;<br> }<br> if(data[i] === item){<br> flag = true;<br> break<br> }else{<br> if(data[i] instanceof Array || data[i] instanceof Object){<br> //此时用flag接住,如果递归找到,flag为true,否则为null<br> ** flag=exitindata(data[i],item);**<br> }<br> }<br> }<br> }else{<br> for(var key in data){<br> if(flag){<br><br> break<br> }<br> if(data.hasOwnProperty(key) === true){<br> if(data[key] === item){<br> flag = true;<br> break<br> }else{<br> if(data[key] instanceof Array || data[key] instanceof Object){<br> //此时用flag接住,如果递归找到,flag为true,否则为null <br> ** flag=exitindata(data[key],item);**<br> }<br> }<br> }<br> }<br> }<br> if(flag){<br> //如果找到了,要把flag置为false,为下次查找初始化flag<br> ** flag=false;**<br> return true;<br> }else{<br> return null<br> }<br> } <br> function find(item){<br> var data = [9,<br> {<br> item1:50,<br> item2:94,<br> item3:[<br> {<br> cc: 9999,<br> ff:9090<br> }<br> ]<br> }<br> ,65,1111,54,11,0,1,3,7,8,5,649,841];<br> console.log(exitindata(data,item));<br> }</p> <p>我测试了之后是可以多次查找的<br> 不知是不是你想要的结果。如有不对,望指正。</p>

VC_August
VC_August 谢谢,哈哈我怎么没想到呢~
大约 3 年之前 回复
Luvjuin
Luvjuin 代码总共改了三行,都在上面注释的地方改的。
大约 3 年之前 回复
Luvjuin
Luvjuin 回答之后这么个事变这样了,尴尬。不过我在网页连续测试find(9090);find(9091);find(9999),输出为true,null,true。
大约 3 年之前 回复

递归,是以本方法的返回值为基础的。函数结束或不结束都在等,你递归头的值,如果没有递归头的值,你前面调用自身的函数会一直等待。不知道,
js里面有没集合,如果有,你把你要处理的数据,全丢集合里面。比如
Map mp=new HashMap();
mp.put(1, 123);
mp.put("111", 456);

System.out.println(mp.containsKey("111"));
VC_August
VC_August 问题找到了,flag的值我没有捕捉到,所以没法控制下一次递归
大约 3 年之前 回复

为什么不把 var flag = false; 放在函数内?

VC_August
VC_August 因为放在函数里面不行,试过了。不过现在问题解决啦
大约 3 年之前 回复

flag = true; 的位置为什么不直接 return true; ???
var flag = false; 放在函数外,每次执行 Find 的时候,都需要重新初始化 flag = false;

VC_August
VC_August 题目我也说了,因为直接flag = false; return true ,它不会终止递归,还会继续找。最终返回一个undefined。所以必须要在下一次递归之前捕捉到flag的值
大约 3 年之前 回复

给你改完了,这个可以用

var flag = false;
    function exitindata(data,item){
    if(data instanceof Array){
         var i = data.length;
         while(i--){
            if(flag){
                break;
            }
            if(data[i] === item){
                flag = true;
                break
            }else{
                if(data[i] instanceof Array || data[i] instanceof Object){
                        flag=exitindata(data[i],item);
                    }
            }
         }
    }else{
        for(var key in data){
            if(flag){   
                break
            }
            if(data.hasOwnProperty(key) === true){
                 if(data[key]  === item){
                    flag = true;
                    break
                 }else{
                    if(data[key] instanceof Array || data[key] instanceof Object){
                         flag=exitindata(data[key],item);
                    }
                 }
            }
        }
    }
    if(flag){
        flag=false;   return true;
    }else{
        return null
    }
} 
function find(item){
    var data = [9,
    {
        item1:50,
        item2:94,
        item3:[
            {
                cc: 9999,
                ff:9090
            }
        ]
    }
    ,65,1111,54,11,0,1,3,7,8,5,649,841];
    console.log(exitindata(data,item));
} 
VC_August
VC_August 恩,跟楼上那位朋友的解释一样的
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
PHP | 以递归方式清空数组的所有值,但保留所有键

<div class="post-text" itemprop="text"> <p>I want to empty all values by empty string in a PHP array, and keeping all the keys names recursively.</p> <p>Example:</p> <pre><code>&lt;?php $input = ['abc'=&gt; 123, 'def'=&gt; ['456', '789', [ 'ijk' =&gt; '555'] ] ]; </code></pre> <p>I want my array to become like this:</p> <pre><code>&lt;?php $output = ['abc'=&gt; '', 'def'=&gt; ['', '', [ 'ijk' =&gt; ''] ] ]; </code></pre> </div>

递归对象转数据,数组内对象的title是父级的拼接

想做一个递归对象转数组,然后数组对象内的title是拼接上父级的,目前写的有些问题,麻烦大神们帮忙看看呀,第二级的会瞎拼接! ``` const obj={ a:{ yangbo:"", c:'' }, } let pre = '' const jsonToArrTree = (json) => { let data = Object.keys(json).map( (item) => { pre += (pre? '.':'') + item let ops = { title:pre, children:[] } let child = json[item] if(Object.prototype.toString.call(child) === '[object Object]' && Object.keys(child).length > 0){ ops.children = jsonToArrTree(child) } return ops }) pre='' return data } console.log(jsonToArrTree(obj)) ```

Mongodb递归搜索对象数组

<div class="post-text" itemprop="text"> <p>I have a tree structure look like this </p> <pre><code>{ "_id" : ObjectId("59aebe21f002a8556ca78310"), "fid" : ObjectId("59aebe216b96002252a89d7b"), "pr" : [ ], "ch" : [ { "_id" : ObjectId("59aebe326b96002252a89d7d"), "trashed" : false }, { "_id" : ObjectId("59aebe376b96002252a89d7f"), "trashed" : false } ] } { "_id" : ObjectId("59aebe33f002a8556ca78347"), "fid" : ObjectId("59aebe326b96002252a89d7d"), "pr" : [ { "_id" : ObjectId("59aebe216b96002252a89d7b"), "trashed" : false } ], "ch" : [ { "_id" : ObjectId("59aebe3b6b96002252a89d81"), "trashed" : false } ] } </code></pre> <p>the <strong>fid</strong> is a folder id and the <strong>ch</strong> is the children of folder , so I want to do a recursive search to get tree of the folders and files. In my case I have a used <code>$graphLookup</code> to do a recursive search but as a result I am getting other folders too</p> <pre><code>pipeline := []bson.M{ {"$match": bson.M{"fid": id}}, {"$graphLookup": bson.M{ "from": "tree", "startWith": "$fid", "connectFromField": "fid", "connectToField": "ch._id", "as": "parents", }}, {"$match": bson.M{"ch.trashed": false}}, } Connection.Session.DB("cctv_storage").C("tree").Pipe(pipeline).All(&amp;tData) </code></pre> <p>My project based on Golang.</p> </div>

递归查找所有数组值

<div class="post-text" itemprop="text"> <p>So I have a big response from an API in a multi-dimensional array, and I need to find all the instances of a certain key-&gt;value pair, specifically <code>['type'] =&gt; PhotoField</code> My task would be easy if they were all the same depth, but they vary, so I am using a recursive function to get all the key value pairs of a specific value. I have morphed a standard recursive array searching algorithm for my purposes. But I still have the problem that when it pushes the path of each instance to the <code>$path</code> array, it just merges to the path of the previous instance. </p> <p>What I really need is for each instance's path to be a subarray within <code>$path</code>.</p> <p>Here is my function:</p> <pre><code>function array_searchRecursive($needle, $haystack, $strict=false, $path=array() ) { if(!array_key_exists('elements', $haystack)) { return false; } foreach( $haystack['elements'] as $key =&gt; $val ) { if( is_array($val) &amp;&amp; $subPath = array_searchRecursive($needle, $val, $strict, $path) ) { $path = array_merge($path, array($key), $subPath); return $path; } elseif( (!$strict &amp;&amp; $val['type'] == $needle) || ($strict &amp;&amp; $val['type'] === $needle) ) { $path[] = $val['key']; } } if (!(empty($path))){ return $path; } return false; } </code></pre> <p>I call it with:</p> <pre><code> array_searchRecursive($resp['form']); </code></pre> <p>And here is some sample data:</p> <pre><code>$resp = Array ( [form] =&gt; Array ( [name] =&gt; Site Inspection [elements] =&gt; Array ( [0] =&gt; Array ( [type] =&gt; Section [key] =&gt; 86d2 [elements] =&gt; Array ( [0] =&gt; Array ( [type] =&gt; ChoiceField [key] =&gt; 450c ) ) ) [1] =&gt; Array ( [type] =&gt; Section [key] =&gt; 6021 [elements] =&gt; Array ( [0] =&gt; Array ( [type] =&gt; TextField [key] =&gt; c8e5 ) [1] =&gt; Array ( [type] =&gt; PhotoField [key] =&gt; 01dd [label] =&gt; Photos of Protective Structure ) [2] =&gt; Array ( [type] =&gt; PhotoField [key] =&gt; 8e1c [label] =&gt; Photos of Degradation to Protective Structures ) ) ) [2] =&gt; Array ( [type] =&gt; Section [key] =&gt; 9335 [elements] =&gt; Array ( [0] =&gt; Array ( [type] =&gt; TextField [key] =&gt; b614 ) [1] =&gt; Array ( [type] =&gt; Repeatable [key] =&gt; 6b00 ( [0] =&gt; Array ( [type] =&gt; TextField [key] =&gt; b646 ) [1] =&gt; Array ( [type] =&gt; PhotoField [key] =&gt; 9747 ) ) ) ) ) ) ) </code></pre> <p>Sincere thanks for any help. It is greatly appreciated.</p> </div>

如何使用递归修改数组

<div class="post-text" itemprop="text"> <p>I have array</p> <pre><code>$arr = ['one', 'two', 'free']; $value = 10; </code></pre> <p>Need use recursion function.</p> <p>So I wanna get array like this</p> <pre><code>$result = ['one' =&gt; ['two' =&gt; ['free' =&gt; 10]]]; </code></pre> </div>

递归函数返回数组始终为null

<div class="post-text" itemprop="text"> <p>Trying to return an array of items from api call, the var_dump spits out the array that I want, but the return is always null. What am I missing? Many thanks</p> <pre><code>function get_all_opened($mailgun, $domain, $list_address, $items, $page_advance = false, $next_url = false) { $end_point = "{$domain}/events"; if($page_advance) { $end_point = "{$domain}/events/{$next_url}"; } //API Call $stats = $mailgun-&gt;get($end_point, array( 'event' =&gt; 'opened', 'limit' =&gt; 25, 'list' =&gt; $list_address )); $item_count = count($stats-&gt;http_response_body-&gt;items); if($item_count &gt; 0) { $items[] = $stats-&gt;http_response_body-&gt;items; } if($item_count &lt; 25) { var_dump($items); //Correct result set return $items; //Always NULL } if($item_count &gt; 24) { $next_parts = explode ('/', $stats-&gt;http_response_body-&gt;paging-&gt;next); $next_url = end($next_parts); get_all_opened($mailgun, $domain, $list_address, $items, true, $next_url); } } $items = array(); get_all_opened($mailgun, $domain, $list_address, $items); </code></pre> </div>

以递归方式从多维数组中删除特定键

<div class="post-text" itemprop="text"> <p>I am trying to create a function to remove keys from a dynamic multidimensional array, i need to give:</p> <pre><code>removeByIndex(['hello', 'my', 'world']); </code></pre> <p>And then the function needs to do this:</p> <pre><code>unset($array['hello']['my']['world']); </code></pre> <p>The number of indexes are dynamic, example:</p> <pre><code>removeByIndex(['hello', 'my']); // Do: unset($array['hello']['my']); removeByIndex(['hello']); // Do: unset($array['hello']); </code></pre> <p>I tried to use some <code>foreach</code> loops, but i didn't find a solution yet.</p> <p>Any help will be welcome.</p> </div>

php 用递归遍历数组多维数

Array ( [dir] => Array ( [F:\开发测试\test\9.14香奈儿1-10] => Array ( [dir] => Array ( [F:\开发测试\test\9.14香奈儿1-10\2362_G_1338059108234.jpg] => Array ( [file] => Array ( [0] => F:\开发测试\test\9.14香奈儿1-10\2362_G_1338059108234.jpg\201205261903496506-1.jpg [1] => F:\开发测试\test\9.14香奈儿1-10\2362_G_1338059108234.jpg\201205261903556506-2.jpg [2] => F:\开发测试\test\9.14香奈儿1-10\2362_G_1338059108234.jpg\201205261904006506-3.jpg [3] => F:\开发测试\test\9.14香奈儿1-10\2362_G_1338059108234.jpg\201205261904076506-4.jpg [4] => F:\开发测试\test\9.14香奈儿1-10\2362_G_1338059108234.jpg\201205261904136506-5.jpg [5] => F:\开发测试\test\9.14香奈儿1-10\2362_G_1338059108234.jpg\201205261904196506-6.jpg [6] => F:\开发测试\test\9.14香奈儿1-10\2362_G_1338059108234.jpg\201205261904256506-7.jpg [7] => F:\开发测试\test\9.14香奈儿1-10\2362_G_1338059108234.jpg\201205261904316506-8.jpg [8] => F:\开发测试\test\9.14香奈儿1-10\2362_G_1338059108234.jpg\201205261904386506-9.jpg [9] => F:\开发测试\test\9.14香奈儿1-10\2362_G_1338059108234.jpg\2362_G_1338059108234.jpg [10] => F:\开发测试\test\9.14香奈儿1-10\2362_G_1338059108234.jpg\2362_G_1338059108234.jpg.txt ) ) [F:\开发测试\test\9.14香奈儿1-10\2559_G_1353138243950.jpg] => Array ( [file] => Array ( [0] => F:\开发测试\test\9.14香奈儿1-10\2559_G_1353138243950.jpg\201211171543306517兰(鳄鱼皮)-1.jpg [1] => F:\开发测试\test\9.14香奈儿1-10\2559_G_1353138243950.jpg\201211171543306517兰(鳄鱼皮)-2.jpg [2] => F:\开发测试\test\9.14香奈儿1-10\2559_G_1353138243950.jpg\201211171543306517兰(鳄鱼皮)-3.jpg [3] => F:\开发测试\test\9.14香奈儿1-10\2559_G_1353138243950.jpg\201211171543316517兰(鳄鱼皮)-4.jpg [4] => F:\开发测试\test\9.14香奈儿1-10\2559_G_1353138243950.jpg\201211171543316517兰(鳄鱼皮)-5.jpg [5] => F:\开发测试\test\9.14香奈儿1-10\2559_G_1353138243950.jpg\2559_G_1353138243950.jpg ) ) [F:\开发测试\test\9.14香奈儿1-10\新建文件夹] => Array ( [dir] => Array ( [F:\开发测试\test\9.14香奈儿1-10\新建文件夹\2558_G_1349878776638.jpg] => Array ( [file] => Array ( [0] => F:\开发测试\test\9.14香奈儿1-10\新建文件夹\2558_G_1349878776638.jpg\201210102219156516克鳄鱼纹(古银扣)-1.jpg [1] => F:\开发测试\test\9.14香奈儿1-10\新建文件夹\2558_G_1349878776638.jpg\201210102219156516克鳄鱼纹(古银扣)-2.jpg [2] => F:\开发测试\test\9.14香奈儿1-10\新建文件夹\2558_G_1349878776638.jpg\201210102219166516克鳄鱼纹(古银扣)-3.jpg [3] => F:\开发测试\test\9.14香奈儿1-10\新建文件夹\2558_G_1349878776638.jpg\201210102219176516克鳄鱼纹(古银扣)-4.jpg [4] => F:\开发测试\test\9.14香奈儿1-10\新建文件夹\2558_G_1349878776638.jpg\201210102219176516克鳄鱼纹(古银扣)-5.jpg [5] => F:\开发测试\test\9.14香奈儿1-10\新建文件夹\2558_G_1349878776638.jpg\201210102219186516克鳄鱼纹(古银扣)-6.jpg [6] => F:\开发测试\test\9.14香奈儿1-10\新建文件夹\2558_G_1349878776638.jpg\201210102219186516克鳄鱼纹(古银扣)-7.jpg [7] => F:\开发测试\test\9.14香奈儿1-10\新建文件夹\2558_G_1349878776638.jpg\2558_G_1349878776638.jpg ) ) [F:\开发测试\test\9.14香奈儿1-10\新建文件夹\shiasd] => Array ( ) ) ) ) ) ) ) 求帮忙 把上面的数组用递归返回所有的键值到一个一维数组中

在数组中反向递归以查找父ID

<div class="post-text" itemprop="text"> <p>Trying to figure out a way of getting the parent ID of an item in a multi dimensional array:</p> <pre><code>$Arr = array( array( "Id" =&gt; 1, "Parent" =&gt; 0, "Children" =&gt; array( array( "Id" =&gt; 2, "Parent" =&gt; 1, "Children" =&gt; array(), ), array( "Id" =&gt; 3, "Parent" =&gt; 1, "Children" =&gt; array( array( "Id" =&gt; 4, "Parent" =&gt; 3, "Children" =&gt; array(), ), ), ), ), ), array( "Id" =&gt; 5, "Parent" =&gt; 0, "Children" =&gt; array( array( "Id" =&gt; 6, "Parent" =&gt; 5, "Children" =&gt; array(), ), ), ) ); </code></pre> <p>I need to get the "Id" for the top element where "Parent" = 0. I.e. for the item with Id 4 it should return 1 as result, or a search for 6 would return 5. I have tried various ways of recursive function but only manage to get the correct result when the depth is 2.</p> <p>I have found this function but it seems to return the name of the key rather than the value:</p> <pre><code>function find_parent($array, $needle, $parent = null) { foreach ($array as $key =&gt; $value) { if (is_array($value)) { $pass = $parent; if (is_string($key)) { $pass = $key; } $found = find_parent($value, $needle, $pass); if ($found !== false) { return $found; } } else if ($key === 'Id' &amp;&amp; $value === $needle) { return $parent; } } return false; } </code></pre> <h2>Edit</h2> <p>The following only works on the 1st level/depth:</p> <pre><code>function GetParent($Data = array(), $Needle = 0){ foreach($Data as $Key =&gt; $Item){ if($Item['Id'] === $Needle &amp;&amp; $Item['Parent'] == 0){ return $Item['Id']; } if(sizeof($Item['Children']) !== 0) GetParent($Item['Children'], $Item['Parent']); } return false; } </code></pre> <p>I don't understand what I'm doing wrong.</p> </div>

递归 算法 最大子数组

虽然写的非常差但还是我这个小白自己亲手写出来的,一边翻书一边谷歌..... 花了好多小时,虽然很罗嗦而且希望大家能帮我找一下我的find_maximum_subarry的错误,其余两个函数我都试过了应该是对的 #include <stdio.h> typedef struct all_of_sum { int aa; int bb; int cc; }all_sum; all_sum all; int max(int one, int two, int three) { int current_max = one; if(current_max < two) { current_max = two; if(current_max < three) current_max = three; } else if(current_max >= three) { if(current_max < three) current_max = three; } return current_max; } all_sum find_crossing_sum(int *array,int a,int mid,int b) { int maxleftsum = -999999,maxrightsum = -999999,currentleft = 0; int currentright = 0,i = 0,j = 0; for(i = a; i <=mid;i++) { currentleft = currentleft + array[i]; if(currentleft > maxleftsum) maxleftsum = currentleft; }; for(j = mid+1; j <= b;j++) { currentright = currentright + array[j]; if(currentright > maxrightsum) maxrightsum = currentright; }; all.aa = i-1; all.bb = j-1; all.cc = maxleftsum + maxrightsum; return all; } typedef struct find_maxium { int low; int high; int ddd; } maxium; maxium mm; maxium find_maximum_subarry(int*array,int a,int b) { int mid = 0,left_low = 0,left_high = 0,left_sum = 0; int right_low = 0,right_high = 0,right_sum = 0; int cross_low = 0,cross_high = 0,cross_sum = 0; if(a == b) { mm.low = a; mm.high = b; mm.ddd = array[a]; return mm; } else { mid = (a + b)/2; left_low = find_maximum_subarry(array,a,mid).low; left_high = find_maximum_subarry(array,a,mid).high; left_sum = find_maximum_subarry(array,a,mid).ddd; right_low = find_maximum_subarry(array,mid+1,b).low; right_high = find_maximum_subarry(array,mid+1,b).high; right_sum = find_maximum_subarry(array,mid+1,b).ddd; cross_low = find_crossing_sum(array,a,mid,b).aa; cross_high = find_crossing_sum(array,a,mid,b).bb; cross_low = find_crossing_sum(array,a,mid,b).cc; } if(max(left_sum,right_sum,cross_sum) == left_sum) { mm.low = left_low; mm.high = left_high; mm.ddd = left_sum; } else if(max(left_sum,right_sum,cross_sum) == right_sum) { mm.low = right_low; mm.high = right_high; mm.ddd = right_sum; } else if(max(left_sum,right_sum,cross_sum) == cross_sum) { mm.low = cross_low; mm.high = cross_high; mm.ddd = cross_sum; } return mm; }

使用Go递归在数组中累加/附加值的问题

<div class="post-text" itemprop="text"> <p>First of all, this is my first non-dummy program using Go. Any recommendation will be appreciated.</p> <p>Code description:</p> <p>I want to retrieve all the information from an API where the information is being paginated. So I want to iterate through all the pages in order to get all the information.</p> <p>This is what I did so far:</p> <p>I have the these two functions:</p> <pre><code>func request(requestData *RequestData) []*ProjectsResponse { client := &amp;http.Client{ Timeout: time.Second * 10, } projects := []*ProjectsResponse{} innerRequest(client, requestData.URL, projects) return projects } func innerRequest(client *http.Client, URL string, projects []*ProjectsResponse) { if URL == "" { return } req, err := http.NewRequest("GET", URL, nil) if err != nil { log.Printf("Request creation failed with error %s ", err) } req.Header.Add("Private-Token", os.Getenv("API_KEY")) res, err := client.Do(req) log.Printf("Executing request: %s", req.URL) if err != nil { log.Printf("The HTTP request failed with error %s ", err) } data, _ := ioutil.ReadAll(res.Body) var response ProjectsResponse err = json.Unmarshal(data, &amp;response) if err != nil { log.Printf("Unmarshalling failed with error %s ", err) } projects = append(projects, &amp;response) pagingData := getPageInformation(res) innerRequest(client, pagingData.NextLink, projects) } </code></pre> <p>Undesired behavior:</p> <p>The values in the <code>projects []*ProjectsResponse</code> array are being appended on each iteration of the recursion, but when the recursion ends I get an empty array list. So, somehow after the <code>innerRequests</code> ends, in the <code>project</code> variable inside the <code>request</code> method I get nothing.</p> <p>Hope somebody and spot my mistake. Thanks in advance. </p> </div>

递归合并两个多维数组应该如何实现

就是我想递归合并两个多维数组应该如何实现 键名有数字不能被改变 php array_merge_recursive函数递归合并多维数组时键名为数字时会重置键名如何解决

用数组递归建立二叉树出错?

递归建立的时候总是出现返回到上一层然后在上一层与下一层之间死循环? ``` #include <iostream> using namespace std; #include <stdlib.h> #define NULLVALUE 0 typedef int Elemtype; typedef struct Tree{ Elemtype data; struct Tree *LTree; struct Tree *RTree; }; void Create(Tree *tree,Elemtype *data,int start,int len){ if(data[start]==NULLVALUE||start>=len){ cout<<222<<endl;//测试 return ; } else{cout<<data[start]<<endl; tree=(Tree *)malloc(sizeof(Tree)); tree->data=data[start]; Create(tree->LTree,data,++start,len); Create(tree->RTree,data,++start,len); } } void Print(Tree *tree){ if(tree==NULL) return ; cout<<tree->data<<" "; Print(tree->LTree); Print(tree->RTree); } int main(){ Elemtype data[]={1,2,4,0,0,5,0,0,3,6,0,0,7}; int len=sizeof(data)/sizeof(data[0]); Tree *tree; Create(tree,data,0,len); Print(tree); return 0; } ```

PHP - 如何递归删除数组的空条目?

<div class="post-text" itemprop="text"> <p>I need to remove empty entries on multilevel arrays. For now I can remove entries with empty sub-arrays, but not empty arrays... confused, so do I... I think the code will help to explain better...</p> <pre><code>&lt;?php /** * * This function remove empty entries on arrays * @param array $array */ function removeEmptysFromArray($array) { $filtered = array_filter($array, 'removeEmptyItems'); return $filtered; } /** * * This is a Callback function to use in array_filter() * @param array $item */ function removeEmptyItems($item) { if (is_array($item)) { return array_filter($item, 'removeEmptyItems'); } if (!empty($item)) { return true; } } $raw = array( 'firstname' =&gt; 'Foo', 'lastname' =&gt; 'Bar', 'nickname' =&gt; '', 'birthdate' =&gt; array( 'day' =&gt; '', 'month' =&gt; '', 'year' =&gt; '', ), 'likes' =&gt; array( 'cars' =&gt; array('Subaru Impreza WRX STi', 'Mitsubishi Evo', 'Nissan GTR'), 'bikes' =&gt; array(), ), ); print_r(removeEmptysFromArray($raw)); ?&gt; </code></pre> <p>Ok, this code will remove "nickname", "birthdate" but is not removing "bikes" that have an empty array.</p> <p>My question is... How to remove the "bikes" entry?</p> <p>Best Regards,</p> <p>Sorry for my english...</p> </div>

C++怎么使用递归实现数组前N个元素倒序输出

顺便看一下这个该怎么改 ``` #include <iostream> using namespace std; int n; int fun(int str[]); int main() { int str[101]; for(int i=0;i<=100;) { str[i] = i++; } int n; cout << "输入:" << endl; cin >> n; fun(str); return 0; } int fun(int str[]) { if(n==0) { return 0; } else { cout << str[n]; --n; return fun(str);//特别是这 } } ```

php使用递归从多维关联数组中删除重复项

<div class="post-text" itemprop="text"> <p>I'm trying to remove duplicated entries where value and type are both equal on a multidimensional associative array, but only using recursion and without array_unique. All keys are associative.</p> <p>I tried this, and I'm getting the same result as the main array. My logic seems to fail me at this late hour.</p> <pre><code>function rmDuplicates(&amp;$array) { $uniqueArray = array(); foreach($array as $k=&gt;$v) { if (is_array($v)) { $uniqueArray[$k] = rmDuplicates($v); } else { if (!in_array($v, $uniqueArray)) { $uniqueArray[] = $v; } } } return $uniqueArray; } </code></pre> </div>

如果所有值都是特定值,则递归删除子数组

<div class="post-text" itemprop="text"> <p>I need to remove all months with 0 values, it must only remove it if all match 0.</p> <p>Here is my array,</p> <pre><code>Array ( [0] =&gt; Array ( [0] =&gt; Month/Year [1] =&gt; BRO002 [2] =&gt; SPI001 [3] =&gt; TYN001 ) [1] =&gt; Array ( [0] =&gt; Jan [1] =&gt; 0 [2] =&gt; 0 [3] =&gt; 1 ) [2] =&gt; Array ( [0] =&gt; Feb [1] =&gt; 0 [2] =&gt; 0 [3] =&gt; 0 ) [3] =&gt; Array ( [0] =&gt; Mar [1] =&gt; 0 [2] =&gt; 0 [3] =&gt; 0 ) [4] =&gt; Array ( [0] =&gt; Apr [1] =&gt; 0 [2] =&gt; 0 [3] =&gt; 0 ) [5] =&gt; Array ( [0] =&gt; May [1] =&gt; 0 [2] =&gt; 3 [3] =&gt; 0 ) [6] =&gt; Array ( [0] =&gt; Jun [1] =&gt; 0 [2] =&gt; 0 [3] =&gt; 0 ) [7] =&gt; Array ( [0] =&gt; Jul [1] =&gt; 0 [2] =&gt; 0 [3] =&gt; 0 ) [8] =&gt; Array ( [0] =&gt; Aug [1] =&gt; 0 [2] =&gt; 0 [3] =&gt; 0 ) [9] =&gt; Array ( [0] =&gt; Sep [1] =&gt; 11 [2] =&gt; 1 [3] =&gt; 2 ) [10] =&gt; Array ( [0] =&gt; Oct [1] =&gt; 0 [2] =&gt; 0 [3] =&gt; 0 ) [11] =&gt; Array ( [0] =&gt; Nov [1] =&gt; 0 [2] =&gt; 0 [3] =&gt; 0 ) [12] =&gt; Array ( [0] =&gt; Dec [1] =&gt; 0 [2] =&gt; 0 [3] =&gt; 0 ) ) </code></pre> <p>The above array would turn into the following,</p> <pre><code>Array ( [0] =&gt; Array ( [0] =&gt; Month/Year [1] =&gt; BRO002 [2] =&gt; SPI001 [3] =&gt; TYN001 ) [1] =&gt; Array ( [0] =&gt; Jan [1] =&gt; 0 [2] =&gt; 0 [3] =&gt; 1 ) [5] =&gt; Array ( [0] =&gt; May [1] =&gt; 0 [2] =&gt; 3 [3] =&gt; 0 ) [9] =&gt; Array ( [0] =&gt; Sep [1] =&gt; 11 [2] =&gt; 1 [3] =&gt; 2 ) ) </code></pre> <p>Thank you.</p> </div>

使用Golang中的递归的数组中的平方和

<div class="post-text" itemprop="text"> <p>So my friend gave me this task where the sum of squares of positive numbers must be calculated using recursion. <br> Conditions - The input will be a string with space separated numbers <br> This is what I've come so far but this shows a <code>runtime error</code>.<br> <br> Here is the full error <a href="https://ideone.com/53oOjN" rel="nofollow noreferrer">https://ideone.com/53oOjN</a> <br></p> <pre><code>package main import( 'fmt', 'strings', 'strconv' ) var n int = 4 var sum_of_squares int = 0 func sumOfSquares(strArray []string, iterate int) int{ number, _ := strconv.Atoi(strArray[iterate]) if number &gt; 0 { sum_of_squares += number*number } if iterate == n { return 0 // just to end the recursion } return sumOfSquares(strArray, iterate+1) } func main() { str := "1 2 3 4" strArray := strings.Fields(str) result := sumOfSquares(strArray, 0) fmt.Println(sum_of_squares, result) } </code></pre> </div>

js递归遍历树形结构json的问题

![图片说明](https://img-ask.csdn.net/upload/201906/06/1559803483_225512.jpg) 数据结构就是这样的地区json。现在有个需求,就是给我一个RegionId,我要找到他本身以及他所有的直系父辈的RegionId,并且放入一个数组中。找到这个RegionId这一级很容易,但是怎么找到所有的直系父辈的RegionId让我有点头疼。有没有大佬会的。。。

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Linux 会成为主流桌面操作系统吗?

整理 |屠敏出品 | CSDN(ID:CSDNnews)2020 年 1 月 14 日,微软正式停止了 Windows 7 系统的扩展支持,这意味着服役十年的 Windows 7,属于...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

学习总结之HTML5剑指前端(建议收藏,图文并茂)

前言学习《HTML5与CSS3权威指南》这本书很不错,学完之后我颇有感触,觉得web的世界开明了许多。这本书是需要有一定基础的web前端开发工程师。这本书主要学习HTML5和css3,看...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

记一次腾讯面试,我挂在了最熟悉不过的队列上……

腾讯后台面试,面试官问:如何自己实现队列?

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

冒泡排序动画(基于python pygame实现)

本项目效果初始截图如下 动画见本人b站投稿:https://www.bilibili.com/video/av95491382 本项目对应github地址:https://github.com/BigShuang python版本:3.6,pygame版本:1.9.3。(python版本一致应该就没什么问题) 样例gif如下 ======================= 大爽歌作,mad

Redis核心原理与应用实践

Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂,和Mysql一样,是个读取数据的软件。 有一个理解是Redis是key value缓存服务器,更多的优点在于对value的操作更加丰富。 安装 yum install redis #yum安装 b...

现代的 “Hello, World”,可不仅仅是几行代码而已

作者 |Charles R. Martin译者 | 弯月,责编 | 夕颜头图 |付费下载自视觉中国出品 | CSDN(ID:CSDNnews)新手...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

程序员毕业去大公司好还是小公司好?

虽然大公司并不是人人都能进,但我仍建议还未毕业的同学,尽力地通过校招向大公司挤,但凡挤进去,你这一生会容易很多。 大公司哪里好?没能进大公司怎么办?答案都在这里了,记得帮我点赞哦。 目录: 技术氛围 内部晋升与跳槽 啥也没学会,公司倒闭了? 不同的人脉圈,注定会有不同的结果 没能去大厂怎么办? 一、技术氛围 纵观整个程序员技术领域,哪个在行业有所名气的大牛,不是在大厂? 而且众所...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

立即提问
相关内容推荐