2010-04-22 14 views
8

Böyle bir JavaScript dizisi varsa:JavaScript dizi nesnelerini saymak nasıl?

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

Bu nasıl dizide nesneleri saymak için ?!
Sayım sonucu 3 nasıl elde edilir, çünkü içeride sadece 3 nesne var: anne, baba, kardeş ?!

Bu bir dizi değilse, JSON dizisine nasıl dönüştürülür? Bir dizi değil

+0

olası yinelenen http://stackoverflow.com/questions/5223/length-of-javascript-associative-array –

+0

Birisi diziyi okumak yerine nesneyi okumak ister mi? –

cevap

20

, bunları nesnenin kendi özellikleri üzerinde yineleme ve saymak gerekir, bir nesne değişmezi olduğunu, örneğin:

hasOwnProperty yöntem miras özellikleri üzerinde iterating önlemek için kullanılmalıdır
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 

, Örneğin İşte

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

Nesnenin üzerinde yineleme yapmadan önce Mozilla'nın '__count__' özelliğini kontrol etmeye değer olabilirsiniz ... – James

+2

@JP:' __count__' Gecko 1.9.3 için geçersiz olarak işaretlendi (Gecko 1.9.3a5pre, (Firefox 3.7a5pre) 'da yok Artık mevcut değil. – CMS

+1

@JP, yinelemeden önce kontrol edebileceğiniz bir şey, yeni ECMAScript 5. Baskı ['Object.keys'] 'in varlığıdır (https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/ Global_Objects/Object/keys) yöntemi, ES5, tüm büyük tarayıcı satıcıları tarafından uygulanmaya başlıyor, şöyle bir şey: "If (Object.keys ===" function "), Object.keys (obj) .length; – CMS

2

Ben bir dizi değil Yani o

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

yapardım nasıl bu değişmezi bir nesnedir.

Nesnelerin özelliklerini yineleme ve sahibi olduğu kaç sayabilirsiniz:

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

sayfanızda jquery kullanarak, bu çalışacaktır: Ben gibi çalışır benim Uygulamada

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

Bu: Bu kodu deneyebilirsiniz

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

, bir tarayıcıda mükemmel çalışıyor:

Object.keys(object).length; 
2

Sen Object.keys() Belirli bir nesnenin kendi enumerable özelliklerinin dizisi döndürür yöntemi kullanabilirsiniz: ait

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 
İlgili konular