第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這個JavaScript方法很神奇,請問為什么?

這個JavaScript方法很神奇,請問為什么?

30秒到達戰(zhàn)場 2018-10-19 10:15:15
function getAim(items, aim) {    if (items == null)        return;    for (var i = 0; i < items.length; i++) {        if (items[i].id == aim && items[i].childrens != null && items[i].childrens.length > 0) {            return items[i];  //這行執(zhí)行后i還會再++,已經(jīng)返回了,循環(huán)還在繼續(xù)。為什么?        }        else if (items[i].childrens != null && items[i].childrens.length > 0) {            getAim(items[i].childrens, aim);        }    }}這個方法是遞歸找子節(jié)點中id = aim的那個節(jié)點。 return items[i] 這行代碼找到后返回,返回后程序還是執(zhí)行了i++,知道循環(huán)完畢,我都return了,怎么還會執(zhí)行啊。怎么改呢?
查看完整描述

1 回答

?
繁花如伊

TA貢獻2012條經(jīng)驗 獲得超12個贊

沒有運行,我大概猜一下。

應(yīng)該是因為遞歸套了很多層了,當(dāng)前這一層遞歸找到了結(jié)果,然后return了,但是調(diào)用棧后面還有遞歸套著呢,當(dāng)然還要繼續(xù)搜索下去,直到最后把以你輸入的DOM為根的子樹搜完為止。

這段遞歸現(xiàn)在的終止條件是,當(dāng)前葉元素為空的時候就會停止前進。 
所以它會把整個子樹搜索完畢,而且你的結(jié)果好像還不能傳遞到最外面去。

那么你需要做的就是再增加一個終止條件,這個條件就是當(dāng)搜索到目標(biāo)的時候停止循環(huán),并把結(jié)果返回上一層遞歸。那么這樣的話,仔細觀察這段代碼,應(yīng)該怎么改造呢?

當(dāng)前遞歸搜索到結(jié)果,和沒有搜索到結(jié)果的區(qū)別在哪里?
區(qū)別在于,一個返回了目標(biāo)元素,一個返回了undefined。
那么只要這樣就行了:

function getAim(items, aim) {    let ans = viod 0;    if (items == null)        return;    
for (var i = 0; i < items.length; i++) {       
 if (items[i].id == aim && items[i].childrens != null && items[i].childrens.length > 0) {           
  return items[i];
        }        else if (items[i].childrens != null && items[i].childrens.length > 0) {            /***改動在這里***/
            ans = getAim(items[i].childrens, aim);            if (ans) {                return (ans);
            }            /***改動在這里***/
        }
    }
}

我并沒有運行,你自己試試看,思路是沒有問題的。


查看完整回答
反對 回復(fù) 2018-11-07
  • 1 回答
  • 0 關(guān)注
  • 508 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號