前端攻城獅學習筆記一:實現一個遍曆數組或對象裡所有成員的迭代器

來源:互聯網
上載者:User
面試題目

  這是搜狐JavaScript面試題,要求如下:

  實現一個遍曆數組或對象裡所有成員的迭代器。

var each = function(obj, fn){        //+++++++++++答題地區+++++++++++                //+++++++++++答題結束+++++++++++};try{                var data1 = [4,5,6,7,8,9,10,11,12];        var data2 = {                "a": 4,                "b": 5,                "c": 6        };         console.group(data1);                each(data1, function(o){                if( 6 == this )                        return true;                else if( 8 == this )                        return false;                console.log(o + ": \"" + this + "\"");        });                console.groupEnd();        /*------[執行結果]------        1: "4"        2: "5"        4: "7"        ------------------*/                console.group(data2);                each(data2, function(v, n){                if( 5 == this )                        return true;                console.log(n + ": \"" + v + "\"");        });                console.groupEnd();        /*------[執行結果]------        a: "4"        c: "6"        ------------------*/        }catch(e){        console.error("執行出錯,錯誤資訊: " + e);}

 

分析過程

  分析如下:

  要遍曆數組或對象成員,因此要對傳入對象進行判斷:

if(obj instanceof Array){}else if(obj instanceof Object){}else{}

  當傳入的是Array對象時,從調用和輸出可以看出,要用到call方法,並且第一個參數為數組的值,第二個參數為元素索引(從1開始),並且當傳回值為false時,結束此過程。所以代碼如下:

        if(obj instanceof Array){            for(var i=0,l=obj.length;i<l;i++){                var temp=fn.call(obj[i],i+1);                if(temp === false){                    return;                }            }        }

  當傳入的是一個對象時,要對對象成員進行遍曆,並且要傳入三個參數,第一個和第二個為成員值,第三個為成員名稱。所以代碼如下:

        else if(obj instanceof Object){            for(var e in obj){                fn.call(obj[e],obj[e],e);            }        }

  最後完整代碼如下:

var each = function(obj, fn){        //+++++++++++答題地區+++++++++++        if(obj instanceof Array){            for(var i=0,l=obj.length;i<l;i++){                var temp=fn.call(obj[i],i+1);                if(temp === false){                    return;                }            }        }        else if(obj instanceof Object){            for(var e in obj){                fn.call(obj[e],obj[e],e);            }        }        else{        }        //+++++++++++答題結束+++++++++++};
小結

  本面試題主要考查了 instanceof 的用法,call的用法,對數組的遍曆,對對象成員的遍曆等知識點。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.