在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ return如何終止each迭代

return如何終止each迭代

問題:我自定義了一個each迭代函數(shù),想比較兩個數(shù)組是否一致。如果遍歷過程中發(fā)現(xiàn)不一樣,則退出循環(huán)。如何退出循環(huán)現(xiàn)在有些疑問。
代碼:

/* 
   自己實現(xiàn)迭代器
*/
const each = function(arr,callback){
    for(var i=0;i<arr.length;i++){
        callback.call(arr[i],i,arr[i]);
    }
}


/* 
    比較兩數(shù)組是否一樣  -----方式一
*/
const compare = function(arr1,arr2){
    if(arr1.length !== arr2.length){
        console.log("兩數(shù)組長度不一致");
        return;
    }
    each(arr1,function(index,item){
        if(item !== arr2[index]){
            console.log("兩數(shù)組不一致");
            return;
        }
    })
}


/* 
    比較兩數(shù)組是否一樣-----方式二
*/
const compare = function(arr1,arr2){
    if(arr1.length !== arr2.length){
        console.log("兩數(shù)組長度不一致");
        return;
    }
    var breaked = false;
    each(arr1,function(index,item){
        if(breaked){
            return;
        }
        if(item !== arr2[index]){
            console.log("兩數(shù)組不一致");
            breaked = true;
        }
    })
}

疑問:使用方式一,如果不相等,循環(huán)還會繼續(xù)執(zhí)行,不會終止。但是使用方式二可以終止循環(huán)。請問兩方式的區(qū)別在哪里。

回答
編輯回答
神曲

return false;

2017年11月14日 20:48
編輯回答
毀了心

任何終止都只是終止當(dāng)前函數(shù),無法終止外部函數(shù)。

2017年11月27日 12:54
編輯回答
糖豆豆

可以用 return new Error() ^_^||

2018年4月17日 05:11
編輯回答
何蘇葉

方式一 each里面是回調(diào)函數(shù)。你在回調(diào)函數(shù)里return只是把回調(diào)函數(shù)return了。而不是你自己定義的那個函數(shù)

2018年5月26日 16:09
編輯回答
維她命

第二個compare 函數(shù)加一行:

   if(breaked){
        console.log(index);//加這一行
        return;
     }

你就會發(fā)現(xiàn)其實第二個函數(shù)也并沒有退出循環(huán)。

要退出循環(huán),還是必須在each函數(shù)中去操作,比如你可以這樣改:

const each = function(arr,callback){
        for(var i=0;i<arr.length;i++){
             if(callback.call(arr[i],i,arr[i])==2){break;}
        }
    }
    
    /*
    比較兩數(shù)組是否一樣 -----方式一
    */
const compare = function(arr1,arr2){
        if(arr1.length !== arr2.length){
            console.log("兩數(shù)組長度不一致");
            return 2;
        }
        each(arr1,function(index,item){
            if(item !== arr2[index]){
                console.log("兩數(shù)組不一致",index);
                return 2;
            }
        })
    }
2018年8月13日 09:41
編輯回答
尋仙

問題的根源在你實現(xiàn)的each中,callback執(zhí)行的結(jié)果在each中看沒有任何意義,一直在for循環(huán)中。另外,你的兩種方式實際上效果是一樣的,不信你在

if(breaked){
    return;
}

加上console.log試試

2018年5月12日 01:08