如何计算JavaScript对象的属性?

时间:2009-08-28 09:25:29

标签: javascript object

假设我在JavaScript中有以下对象:

var object = {
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}; 

如何找出对象中存在多少个值?

9 个答案:

答案 0 :(得分:479)

你可以使用这个简单的代码来做到这一点:

Object.keys(myObject).length

答案 1 :(得分:103)

没有简单的答案,因为Object - JavaScript中的每个对象都是从中派生出来的 - 自动包含许多属性,并且您获得的确切属性集取决于特定的解释器以及在您之前执行的代码。所以,你不得不将你定义的那些与你免费获得的那些分开。

这是一种方式:

var foo = {"key1": "value1", "key2": "value2", "key3": "value3"};
Object.prototype.foobie = 'bletch'; // add property to foo that won't be counted

var count = 0;
for (var k in foo) {
    if (foo.hasOwnProperty(k)) {
       ++count;
    }
}
alert("Found " + count + " properties specific to foo");

第二行显示了其他代码如何为所有Object衍生产品添加属性。如果删除循环内的hasOwnProperty()检查,则属性计数将至少达到4.在包含除此代码之外的其他JavaScript的页面上,如果其他代码也修改了{,则可能高于4 {1}}原型。

答案 2 :(得分:48)

使用underscore库,非常有用:_.keys(obj).length

答案 3 :(得分:12)

 var miobj = [
  {"padreid":"0", "sw":"0", "dtip":"UNO", "datos":[]},
  {"padreid":"1", "sw":"0", "dtip":"DOS", "datos":[]}
 ];
 alert(miobj.length) //=== 2

,但

 alert(miobj[0].length) //=== undefined

此功能非常好

Object.prototype.count = function () {
    var count = 0;
    for(var prop in this) {
        if(this.hasOwnProperty(prop))
            count = count + 1;
    }
    return count;
}

alert(miobj.count()) // === 2
alert(miobj[0].count()) // === 4

答案 4 :(得分:11)

您可以遍历对象以获取键或值:

function numKeys(obj)
{
    var count = 0;
    for(var prop in obj)
    {
        count++;
    }
    return count;
}

它看起来像是“拼写错误”,但只想指出您的示例语法无效,应该是

var object = {"key1":"value1","key2":"value2","key3":"value3"};

答案 5 :(得分:5)

如果可用,则此函数使用Mozilla的__count__属性,因为它比迭代每个属性更快。

function countProperties(obj) {
  var count = "__count__",
  hasOwnProp = Object.prototype.hasOwnProperty;

  if (typeof obj[count] === "number" && !hasOwnProp.call(obj, count)) {
    return obj[count];
  }
  count = 0;
  for (var prop in obj) {
    if (hasOwnProp.call(obj, prop)) {
      count++;
    }
  }
  return count;
};

countProperties({
  "1": 2,
  "3": 4,
  "5": 6
}) === 3;

答案 6 :(得分:3)

编辑:这将导致jquery发生的大小写错误,以及其他一些不便之处。你不应该使用它 :(也许如果可以添加一个私有方法而不是一个公共属性函数,这没关系,但现在没有时间)。社区wikied

不要使用:

即使javascript的对象默认没有count函数,类也很容易扩展,可以自己添加:

Object.prototype.count = function () {
    var count = 0;
    for(var prop in this) {
        if(this.hasOwnProperty(prop))
            count = count + 1;
    }
    return count;
}

在那之后可以执行

var object = {'key1': 'val1', 'key2':'val2', 'key3':'val3'};
console.log(object.count()); // 3

总之,如果你想要对象中的计数功能,你需要从代码块1中复制代码,并在执行时间的早期粘贴它(在你调用计数之前)。

请告诉我这是否适合您!

此致 佩德罗

答案 7 :(得分:1)

对于那些会阅读这个问题/答案的人来说,这里是一个Dictionary集合的JavaScript实现,与.NET的功能非常相似:JavaScript Dictionary

答案 8 :(得分:-4)

虽然它不是一个“真实的对象”,但你总是可以这样做:

var foo = [
  {Key1: "key1"},
  {Key2: "key2"},
  {Key3: "key3"}
];

alert(foo.length); // === 3