亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

篩選未知的最優(yōu)解-迭代器模式

Coly / 902人閱讀

摘要:而事實上為了消除這個現(xiàn)象,衍生出來的模式有很多,比如策略模式,單例模式,迭代器模式等。比如自己定義一個迭代器這就是一個簡單的內(nèi)部迭代器。迭代器的應(yīng)用說了迭代器的基本原理后,應(yīng)該來點干貨了。

程序的bug王

請不要被標(biāo)題所迷惑,這樣說bug王,只是為了吸睛。 在程序的世界里,我們要多喝茶,慢慢聊?;貧w正題,這里想說的bug王指的是條件的分支語句。 比如: if...else if...else if... else if.........esle... 。想這樣的。
看個實例:

var model = function(flag){
    if(flag===0){
        return "this is zero";
    }else if(flag === 1){
        return "this is first";
    }else if(falg === 2){
        return "this is second";
    }else {
        ...
    }
}

像這樣的。 因為每一次條件判斷都是對性能的一次rape。而事實上為了消除這個現(xiàn)象,衍生出來的模式有很多,比如: 策略模式,單例模式,迭代器模式等。這里主要想講一下,迭代器模式.

迭代器模式

迭代器其實就是一個遍歷,能夠順序遍歷一個聚合對象中的一些屬性. 比如數(shù)組中的.Array.prototype.forEach。
其實就是遍歷,然后將獲得的參數(shù)進行回調(diào)處理(?。?!注意,迭代器最重要的一點就是將循環(huán)中的遍歷數(shù)組的參數(shù)傳給回調(diào)函數(shù)處理.)

var arr = [1,2,3,4,5];
arr.forEach(function(val,index,arr){
    ...
})

而且迭代器模式你可以自定義迭代,比如內(nèi)部迭代,外部迭代,順序迭代,倒序迭代等等. 由于懶,所以就列一個比較常見的順序迭代吧。
通常也就是使用了for循環(huán)來構(gòu)建的。 比如自己定義一個迭代器

var each = function(arr,fn){
    for(var i = 0,val;val = arr[i++];){
        if(val==false){
            break;
        }
        fn(val,index,arr);
    }
}

這就是一個簡單的內(nèi)部迭代器。即將數(shù)組類型進行簡單的遍歷,然后如果遍歷完成則返回。

迭代器的應(yīng)用

說了迭代器的基本原理后,應(yīng)該來點干貨了。
迭代器在各種語言中,差不多都已經(jīng)普及了,所以重構(gòu)已有的方法是沒有什么價值的。但迭代器最主要的功能是自定義一些系列算法,將所需要的提取出來. 比如: 事件模型事件的獲取。

var bind = (function() {
    if (document.addEventListener) {
        return function(ele, fn, type) {
            ele.addEventListener(type, fn, false);
        }
    } else if (document.attachEvent) { //檢測低版本的IE
        return function(ele, fn, type) {
            ele.attachEvent(type, fn);
        }
    } else {
        return function(ele,fn,type){
            ele[`on${type}`] = fn;
        }
    }
})();

可以看出里面充斥著分支語句,為了消除分支??梢詫⒉煌姆椒òb起來,然后使用迭代器統(tǒng)一遍歷.

var bind = (function(){
    var DOM2 = (function(){
         if (document.addEventListener) {
             return function(ele,fn,type){
                 ele.addEventListener(type,()=>{fn();},false);
             }
         }else {
             return false;
         }
    })();
    var IE = (function(){
        if(document.attachEvent){
            return function(ele,fn,type){
                ele.attachEvent(type,fn);
            }
        }else{
            return false;
        }
    })();
    var DOM0 = function(ele,fn,type){
        ele[`on${type}`] = ()=>{fn();};
    }
    //添加迭代器
    var Itera = function(){
        for(var i = 0,val;val = arguments[i++];){
            if(typeof val === "function"){
                return val;
            }
        }
    }
    return Itera(DOM2,IE,DOM0);
})();
console.log(bind);  ////function (ele,fn,type){ele.addEventListener(type,()=>{fn();},false);}

接著你就可以使用bind()函數(shù)進行事件的綁定處理。但是這個應(yīng)該算是將原來簡單的變復(fù)雜了,因為現(xiàn)在事件模式幾乎只有這3種(原生). 拓展性我就不說了。 所以一般用來判斷事件綁定的話,推薦還是使用上面那個方式,來得更直接.
但可以從上面的例子可以看出,迭代器模式只是提供一種思想,提取最精華的部分,通過遍歷選出最優(yōu)解。模式這么多,關(guān)鍵要找到最適合你的。還是那句話,如果這個坑 坑不死我,我一定會踩更多的坑。 所以多實踐,多學(xué)習(xí),多踩坑才是進步的證明。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/91598.html

相關(guān)文章

  • 全新視角:用變分推斷統(tǒng)一理解生成模型

    摘要:相比于,它將也作為隱變量納入到變分推斷中。結(jié)論綜述本文的結(jié)果表明了變分推斷確實是一個推導(dǎo)和解釋生成模型的統(tǒng)一框架,包括和。 作者丨蘇劍林單位丨廣州火焰信息科技有限公司研究方向丨NLP,神經(jīng)網(wǎng)絡(luò)個人主頁丨kexue.fm前言我小學(xué)開始就喜歡純數(shù)學(xué),后來也喜歡上物理,還學(xué)習(xí)過一段時間的理論物理,直到本科畢業(yè)時,我才慢慢進入機器學(xué)習(xí)領(lǐng)域。所以,哪怕在機器學(xué)習(xí)領(lǐng)域中,我的研究習(xí)慣還保留著數(shù)學(xué)和物理的...

    tinylcy 評論0 收藏0
  • 貪心算法

    摘要:貪心算法與動態(tài)規(guī)劃算法的差異貪心算法和動態(tài)規(guī)劃算法都要求問題具有最優(yōu)子結(jié)構(gòu)性質(zhì),這是類算法的一個共同點。 貪心算法的基本要素對于一個具體的問題,怎么知道是否可用貪心算法解此問題,以及能否得到問題的最優(yōu)解呢?這個問題很難給予肯定的回答。但是,從許多可以用貪心算法求解的問題中看到這類問題一般具有2個重要的性質(zhì):貪心選擇性質(zhì)和最優(yōu)子結(jié)構(gòu)性質(zhì)。 1、貪心選擇性質(zhì)所謂貪心選擇性質(zhì)是指所求問題的整...

    missonce 評論0 收藏0
  • 算法導(dǎo)論筆記動態(tài)規(guī)劃DP詳解-鋼條切割的分析與實現(xiàn)

    摘要:假定出售一段長度為英寸的鋼條的價格為單位,鋼條長度均為整英寸。注若長度為英寸的鋼條的價格足夠大,最優(yōu)解可能就是完全不需要切割??紤]長度為的情況,下圖給出了英寸鋼條的所有切割方案。 DP和分治的相似 都是通過組合子問題的解來求解原問題。 DP中的programming指的是一種表格法,而非coding。 DP和分治的不同 分治步驟:(例如歸并排序) 將問題劃分為互不相交的子問題 ...

    shinezejian 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<