【问题标题】:How to count JavaScript array objects?如何计算 JavaScript 数组对象?
【发布时间】:2010-04-22 17:24:35
【问题描述】:

当我有这样的 JavaScript 对象时:

var member = {
    "mother": {
        "name" : "Mary",
        "age" : "48"
    },
    "father": {
        "name" : "Bill",
        "age" : "50"
    },
    "brother": {
        "name" : "Alex",
        "age" : "28"
    }
}

如何计算这个对象中的对象?!
我的意思是如何得到计数结果 3,因为里面只有 3 个对象:母亲、父亲、兄弟?!

如果不是数组,如何转成JSON数组?

【问题讨论】:

标签: javascript oop object


【解决方案1】:

这不是一个数组,是一个对象字面量,你应该遍历对象自己的属性并计算它们,例如:

function objectLength(obj) {
  var result = 0;
  for(var prop in obj) {
    if (obj.hasOwnProperty(prop)) {
    // or Object.prototype.hasOwnProperty.call(obj, prop)
      result++;
    }
  }
  return result;
}

objectLength(member); // for your example, 3

应该使用hasOwnProperty 方法来避免迭代继承的属性,例如

var obj = {};
typeof obj.toString; // "function"
obj.hasOwnProperty('toString'); // false, since it's inherited

【讨论】:

  • 在迭代对象之前可能值得检查 Mozilla 的 __count__ 属性...
  • @J-P: __count__ 在 Gecko 1.9.3 中被标记为过时,(在 Gecko 1.9.3a5pre 中,(Firefox 3.7a5pre)不再存在)
  • @J-P,您可以在迭代之前检查一下,是否存在新的 ECMAScript 第 5 版 Object.keys 方法,ES5 开始被所有主要浏览器供应商实现,如下所示:@ 987654329@
  • 我觉得这有点过头了。如果他只是简单地计算 JSON 中的属性数量,那么依靠 Object.keys(memebers) 就足够了。
  • 最后是“内部”方法的解决方案,而不是查询的文档)
【解决方案2】:

你可以试试这段代码,它在浏览器中完美运行:

Object.keys(member).length;

【讨论】:

    【解决方案3】:

    如果您在页面上使用 jquery,这将起作用:

    $(member).toArray().length;
    

    【讨论】:

      【解决方案4】:

      您可以使用 Object.keys() 方法返回给定对象自己的可枚举属性的数组:

      Object.keys(member).length;
      

      【讨论】:

      • 似乎与之前的答案相同。
      【解决方案5】:

      那不是一个数组,它是一个对象字面量。

      您可以迭代对象属性并计算其拥有的数量:

      var count = 0;
      for (var k in obj) {
        // if the object has this property and it isn't a property
        // further up the prototype chain
        if (obj.hasOwnProperty(k)) count++;
      }
      

      【讨论】:

        【解决方案6】:
        var member = {
                "mother": {
                    "name" : "Mary",
                    "age" : "48"
                },
                "father": {
                    "name" : "Bill",
                    "age" : "50"
                },
                "brother": {
                    "name" : "Alex",
                    "age" : "28"
                }
            }
            console.log('member key size:' + Object.keys(member).length);
        
        ref a good guy : https://stackoverflow.com/questions/5223/length-of-a-javascript-object
        

        【讨论】:

          【解决方案7】:

          这就是我的做法

          function getObjectLength( obj )
          {
            var length = 0;
            for ( var p in obj )
            {
              if ( obj.hasOwnProperty( p ) )
              {
                length++;
              }
            }
            return length;
          }
          

          【讨论】:

            【解决方案8】:

            在我的实践中,我是这样工作的:

            /*
            *   $.count(array) -  Returns the number of elements in an array (immproved equivalent to .length property). 
            */
            $.count = function (array){
                if(array.length)
                    return array.length;
                else
                {
                    var length = 0;
                    for ( var p in array ){if(array.hasOwnProperty(p)) length++;};
                    return length;
                }
            }
            

            【讨论】:

              猜你喜欢
              • 2020-10-11
              • 2014-02-24
              • 2021-10-26
              • 2017-01-17
              • 2019-09-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-09-15
              相关资源
              最近更新 更多