如何使用jquery $ .each()方法迭代对象文字数组?

时间:2011-08-07 02:18:29

标签: javascript jquery arrays object literals

如何使用jquery $ .each()方法迭代对象文字数组?

在chrome调试器中,它返回“未定义,未定义”。

任何帮助都会非常感激。谢谢!

    var links = [ 
                    { className : 'hover', url : 'http://www.yahoo.com' },
                    { className : 'hover-2', url : 'http://www.foxnews.com' },
                ];


    loopy(links)


    function loopy(obj){

        $.each(

            obj,

            function(){

                console.log(obj.className + ', ' + obj.url);

            }                   

        );
    }

3 个答案:

答案 0 :(得分:6)

尝试:

   $.each(
        obj,
        function(i, val){
            console.log(val.className + ', ' + val.url);
        }                   
    );

$.each函数参数有两个参数 - 数组中当前项的索引,第二个是数组的实际当前值。

有关更多解释和示例,请参阅API

您可以看到此fiddle以查看其实际效果。

答案 1 :(得分:1)

我只是想提供一个稍微修改过的David的响应版本,在处理大型对象时会对DOM更加温和。

原始答案(上):

$.each(
  obj,
  function(i, val){
    console.log(val.className + ', ' + val.url);
  }                   
);

此解决方案有效,但它为对象中的每个属性生成一个全新的迭代器函数实例。没有必要,我认为通过声明处理这类事情的具体方法,你会在更大的应用程序中找到更稳定的性能。

试试这个:

// Process a property in your link object
function links_iterationHandler(i, val) {
   console.log(val.className + ', ' + val.url);
}

// Traverse the link object and pass each result off to the method above
$.each(obj, links_iterationHandler);

这基本上做同样的事情,但不会对DOM施加同样的影响。如果您的对象中只有几个项目,那么这不是什么大问题。但是如果你正在处理大量数据,比如通过Ajax加载的大记录集,它肯定会有所作为。

干杯!

答案 2 :(得分:0)

我会试试这个: $ .each([52,97],function(index,value){   alert(index +':'+ value); });

第一个属性是索引。

http://api.jquery.com/jQuery.each/