对jQuery $ .each函数感到困惑

时间:2015-02-04 22:30:36

标签: javascript jquery function each

我们说我有

$.each(data,function(i,item){
                ...
            });

我得到$ .each将迭代对象(或数组)数据,但我对该函数感到困惑。为什么"我"在循环上递增1(" i" ++)以及定义" item"是数据[i]?这只是一个应用于对象或数组中每个项目的内置函数机制吗?

由于

3 个答案:

答案 0 :(得分:0)

它正是一个内置的jquery函数,对于每个项目(使用for循环,它应用你提供的函数,传递给函数索引和元素[index])。此外,它比检测$ .each中的第一个参数是json还是数组更聪明 - 对于数组 - 为json传递索引,键与值一起传递。)

类似的实现如下:

function each(x, fn) {
   if(x.constructor == Array) {
     for(var i = 0; i < x.length; i++) {
        fn(i, x[i]);
     }
   } else if (x.constructor == Object) {
     for(var key in x) {
         fn(key, x[key]);
     }
   } else {
     throw Exception('Non array or object passed');
   }
}
each([1,2,3], function(ind, el) {console.log(ind, el)});
each({x:1, y:2}, function (key, el) { console.log(key, el) });

答案 1 :(得分:0)

jQuery的.each()函数调用你的回调函数,元素的索引作为第一个参数,元素的值作为第二个参数。 您可以在此处找到相关文档: http://devdocs.io/jquery/jquery.each

答案 2 :(得分:0)

这是一个&#34;假设的实施&#34;这说明了如何实现这一目标:

var myEachFunction = function (array, callback) {
    var i, len;
    for (i = 0, len = array.length; i < len; ++i) {
        callback(i, array[i]);
    }
};

// Usage: myEachFunction([5, 6, 7], function (i, item) {
//     doSomething();
// });

在这个实现中,我按顺序调用带有循环索引和项值的提供的回调函数。

jQuery的实现类似,但更为复杂。除了错误/参数检查之外,它还支持迭代对象,而不仅仅是数组。 jQuery文档提供了有关以什么顺序传递哪些参数的更多信息。