代码之家  ›  专栏  ›  技术社区  ›  Sachin Shanbhag

有没有办法从对象中获取元素的数量?

  •  7
  • Sachin Shanbhag  · 技术社区  · 15 年前

    {
        "OBJECT1" : {
            "NAME1" : "VALUE1",
            "NAME2" : "VALUE2",
            "NAME3" : "VALUE3"
         },
         "OBJECT2" : {
            "NAME4" : "VALUE4",
            "NAME5" : "VALUE5"
         }
    }
    

    从这个对象中,我想得到OBJECT1=3的元素数和OBJECT2=2的元素数。如果这一切都可以用javascript实现的话。 基本上,我要做的是,动态地遍历对象中可用的名称-值对,这样如果有人向对象添加了另一个元素,我就不必更改代码。

    另外,由于我只允许在我的用例中使用object,所以也排除了任何替代方法。

    3 回复  |  直到 15 年前
        1
  •  9
  •   Kristoffer Sall-Storgaard ProllyGeek    15 年前

    function countObjectProperties(obj)
    {
        var count = 0;
        for(var i in obj)
            if(obj.hasOwnProperty(i))
                count++;
    
        return count;
    }
    

    阐述为什么需要使用 hasOwnProperty 拥有自己的财产 在数之前。 More details at MSDN 或在 Mozilla Developer Center

        2
  •  4
  •   KeatsPeeks    15 年前

    表示 (这是您的情况),您不能使用任何长度属性。你需要在对象中循环(见克里斯托弗的答案)。

    如果它代表 ,您可以通过以下方式获得长度:

    var len = arr.length;
    

    var len = $(JSON).length;
    
        3
  •  1
  •   Piskvor left the building Rohit Kumar    15 年前

    对于在属性中循环,可以使用For..in构造:

    for (var item in myobject) {
      // some browsers add more properties to every object, we don't want those
      if (myobject.hasOwnProperty(item)) {
        do_something(item);
      }
    }
    

    假设 myobject 是你问题中的对象,它将循环通过它并调用 do_something(OBJECT1) do_something(OBJECT2)

    // loop through OBJECT1 and OBJECT2
    for (var item in myobject) {
      // some browsers add more properties to every object, we don't want those
      if (myobject.hasOwnProperty(item)) {
        // loop through the item's children
        for (var pair in item) {
          if (item.hasOwnProperty(pair)) {
            // each of the name:value pairs will be passed to this
            do_something_else(item,pair);
          }
        }
      }
    }