【问题标题】:Iterating a JavaScript object's properties using jQuery使用 jQuery 迭代 JavaScript 对象的属性
【发布时间】:2010-11-08 23:25:20
【问题描述】:

有没有 jQuery 方法对对象的成员执行迭代,例如:

    for (var member in obj) {
        ...
    }

我只是不喜欢 for 从我可爱的 ​​jQuery 符号中脱颖而出!

【问题讨论】:

    标签: javascript jquery for-loop iteration


    【解决方案1】:
    $.each( { name: "John", lang: "JS" }, function(i, n){
        alert( "Name: " + i + ", Value: " + n );
    });
    

    each

    【讨论】:

    • 我也猜想,提醒n 并不完全正确。至少可以是n.name
    • @Eugene:我不明白你的意思。每个函数将一个数组或对象作为第一个参数,将一个函数作为第二个参数。数组中的每个元素/对象中的每个属性都会调用此函数。每次调用该函数时,它都会获取作为参数传入的索引和值/名称和值。在我的示例中,参数“n”是两个字符串“John”和“JS”。 “名称”属性将是“未定义”。
    • 是的。我在这里错了。我不知何故认为,对象中的每个属性都是另一个对象,例如属性名称是一个字符串。当然,这一切都是错误的。非常抱歉。 :)
    • 每个都有更多的功能:this 也是nreturn false 打破了每个循环...
    • in 认真的吗?为什么不用indexname 来保持清洁?尽管$.each(obj, callback)$(obj).each(callback) 的作用不同,但您确实教会了我一些新东西,非常感谢。赞成。
    【解决方案2】:

    您也可以将each 用于对象,而不仅仅是用于数组:

    var obj = {
        foo: "bar",
        baz: "quux"
    };
    jQuery.each(obj, function(name, value) {
        alert(name + ": " + value);
    });
    

    【讨论】:

      【解决方案3】:

      注意:现在大多数现代浏览器都允许您在开发者控制台中导航对象。这个答案已经过时了。

      此方法将遍历对象属性并将它们写入控制台并增加缩进:

      function enumerate(o,s){
      
          //if s isn't defined, set it to an empty string
          s = typeof s !== 'undefined' ? s : "";
      
          //if o is null, we need to output and bail
          if(typeof o == "object" && o === null){
      
             console.log(s+k+": null");
      
          } else {    
      
              //iterate across o, passing keys as k and values as v
              $.each(o, function(k,v){
      
                  //if v has nested depth
                 if(typeof v == "object" && v !== null){
      
                      //write the key to the console
                      console.log(s+k+": ");
      
                      //recursively call enumerate on the nested properties
                      enumerate(v,s+"  ");
      
                  } else {
      
                      //log the key & value
                      console.log(s+k+": "+String(v));
                  }
              });
          }
      }
      

      只需将要迭代的对象传递给它:

          var response = $.ajax({
              url: myurl,
              dataType: "json"
          })
          .done(function(a){
             console.log("Returned values:");
             enumerate(a);
          })
          .fail(function(){ console.log("request failed");});
      

      【讨论】:

      • 当值为 null 时使用此错误,出现“未捕获的 TypeError:无法读取属性 'length' of null”
      【解决方案4】:

      晚了,但可以通过Object.keys 之类的方式完成,

      var a={key1:'value1',key2:'value2',key3:'value3',key4:'value4'},
        ulkeys=document.getElementById('object-keys'),str='';
      var keys = Object.keys(a);
      for(i=0,l=keys.length;i<l;i++){
         str+= '<li>'+keys[i]+' : '+a[keys[i]]+'</li>';
      }
      ulkeys.innerHTML=str;
      &lt;ul id="object-keys"&gt;&lt;/ul&gt;

      【讨论】:

        猜你喜欢
        • 2016-02-26
        • 2011-06-18
        • 2015-08-29
        • 2023-03-24
        • 1970-01-01
        • 2015-09-22
        • 2014-09-03
        • 1970-01-01
        • 2013-04-04
        相关资源
        最近更新 更多