欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

原生js实现jq的$.each()方法

程序员文章站 2022-05-03 20:05:39
...

jq的$.each()方法:

语法:jQuery.each(object, [callback])

回调函数拥有两个参数:第一个为对象的成员或数组的索引,第二个为对应变量或内容。如果需要退出 each 循环可使回调函数返回 false,其它返回值将被忽略。

示例1 遍历数组:

原生js实现jq的$.each()方法

示例2 遍历对象

原生js实现jq的$.each()方法


原生方法实现如下:

// 通过字面量方式实现的函数each
var each =  function(object, callback){
  var type = (function(){
          switch (object.constructor){
            case Object:
                return 'Object';
                break;
            case Array:
                return 'Array';
                break;
            case NodeList:
                return 'NodeList';
                break;
            default:
                return 'null';
                break;
        }
    })();
    // 为数组或类数组时, 返回: index, value
    if(type === 'Array' || type === 'NodeList'){
        // 由于存在类数组NodeList, 所以不能直接调用every方法
        [].every.call(object, function(v, i){
            return callback.call(v, i, v) === false ? false : true;
        });
    }
    // 为对象格式时,返回:key, value
    else if(type === 'Object'){
        for(var i in object){
            if(callback.call(object[i], i, object[i]) === false){
                break;
            }
        }
    }
}

测试下:

数组类型:

原生js实现jq的$.each()方法

对象类型:

原生js实现jq的$.each()方法

类数组类型:
原生js实现jq的$.each()方法


增加退出循环条件:

var obj= {name:'box', color: 'red', size:'big', number: '100',}
each(obj, function(i, v){
  if(i === 'color'){ 
    console.log('箱子的颜色是,'+v+'');
    return true;
  }
  if(i === 'size' && v=== 'big'){
    console.log('型号,数量符合收货');
    return false;
  }
  console.log(i + ': ' + v);
});

原生js实现jq的$.each()方法





原文链接:http://www.jianshu.com/p/8b9f09fe656b

相关标签: each