1-JavaScript設計模式——commonUtils工具庫之多維數組的遍歷

在學習 JavaScript 設計模式之前,我們先做一個 commonUtils 工具庫,以便於後期的學習和使用。


 commonUtils 工具庫包括:多維數組遍歷,繼承函數,接口類及其驗證。


本章爲多維數組的遍歷 代碼如下:

/*
  對於如下多維數組,該如何遍歷呢?
  
    其實方法很簡單——遞歸;
    對於存在 “無規律的層級關係” 的成員的遍歷,也就是 “樹狀結構” 的成員的遍歷,我們應該立刻想到遞歸
*/
var arr = [62,31,[45,[16,85]]];// 多維數組

// 爲 Array 原型對象添加一個 each 遍歷方法
Array.prototype.each = function(fn){
  try{
    // 判斷遍歷方法入口條件
    // 當數組的長度大於0的時候 && 傳遞的參數必須爲函數
    if(this.length > 0 && typeof fn === 'function'){
      
      // 判斷 this.i 成員是否存在,如果不存在,則創建this.i 作爲數組下標
      this.i || (this.i = 0);
      
      // 開始循環遍歷
      while(this.i < this.length){
        // 獲得數組的元素
        var item = this[this.i];
        
        // 判斷當前元素是否爲數組
        if(item && item.constructor === Array){
          // 如果當前元素爲數組,則進行遞歸操作
          item.each(fn);
        }else{
          // 如果當前元素不是數組(那就是一個非數組的最終元素),則將該元素作爲參數傳遞給fn函數
          fn.call(item,item);// 第一個參數寫啥都行,因爲 fn函數 不需要綁定任何作用域
        }
        this.i ++; // 每遍歷一個元素,數組下標加1
      }
      this.i = null;// 釋放內存 垃圾回收機制回收變量
    }
  }catch(e){
    throw new Error('something is error...');
  }
  return this;
};

var arr = [62,31,[45,[16,85]]];// 多維數組

arr.each(function(item){
  alert(item);
});
// 結果:62 31 45 16 85


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章