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


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