2010-04-22 54 views
8

当我有一个JavaScript数组是这样的:如何计算JavaScript数组对象?

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

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

如果不是数组,那么如何将它转换成JSON数组?

+0

可能重复http://stackoverflow.com/questions/5223/length-of-javascript-associative-array – 2010-04-22 17:29:51

+0

有人想编辑它来读对象而不是数组? – 2010-04-22 17:46:54

回答

20

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

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 
+0

在迭代对象之前值得检查Mozilla的'__count__'属性... – James 2010-04-22 17:34:38

+2

@JP:'__count__'被标记为已过时的Gecko 1.9.3,(在Gecko 1.9.3a5pre,(Firefox 3.7a5pre)不存在了) – CMS 2010-04-22 17:37:03

+1

@JP,你可以在迭代之前检查一下,是新ECMAScript 5th Edition ['Object.keys']的存在(https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/ Global_Objects/Object/keys)方法,ES5开始由所有主流浏览器供应商实现,如下所示:'if(typeof Object.keys ===“function”)return Object.keys(obj).length;' – CMS 2010-04-22 17:56:15

2

以下是我会做它

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

这不是一个数组,它是一个对象文本。

可以遍历对象的属性和指望它有多少拥有:

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++; 
} 
18

如果您正在使用您的网页上的jQuery,这将工作:

$(member).toArray().length; 
0

在我的实践,我喜欢工作这样的:

/* 
* $.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; 
    } 
} 
3

你可以试试这个代码,它完全在浏览器中:

Object.keys(object).length; 
2

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

Object.keys(member).length; 
0
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