2010-04-22 32 views
8

Cuando tengo una matriz de JavaScript así:¿Cómo contar objetos de matriz de JavaScript?

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

Cómo contar los objetos de esta matriz ?!
Me refiero a cómo obtener un resultado de conteo 3, porque solo hay 3 objetos adentro: madre, padre, hermano?

Si no se trata de una matriz, ¿cómo convertirla en una matriz JSON?

+0

posible duplicado de http://stackoverflow.com/questions/5223/length-of-javascript-asociative-array –

+0

¿Alguien quiere editarlo para leer objeto en lugar de array? –

Respuesta

20

Eso no es una matriz, es un objeto literal, debe repetir las propiedades propias del objeto y lo considero como, por ejemplo:

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 

El método hasOwnProperty se debe utilizar para evitar la iteración sobre las propiedades heredadas , p.ej

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

Puede valer la pena buscar la propiedad '__count__' de Mozilla antes de iterar sobre el objeto ... – James

+2

@JP:' __count__' está marcado como obsoleto para Gecko 1.9.3, (en Gecko 1.9.3a5pre, (Firefox 3.7a5pre) no lo hace ya no existe) – CMS

+1

@JP, algo que podría verificar antes de iterar, es la existencia del nuevo ECMAScript 5th Edition ['Object.keys'] (https://developer.mozilla.org/es/Core_JavaScript_1.5_Reference/ Global_Objects/Object/keys), ES5 está comenzando a ser implementado por todos los principales proveedores de navegadores, algo como esto: 'if (typeof Object.keys ===" function ") return Object.keys (obj) .length;' – CMS

2

Así es como yo lo haría

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

Eso no es una matriz, es un objeto literal.

Se puede recorrer las propiedades de los objetos y contar cuántas que posee:

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

Si está utilizando jQuery en su página, esto va a funcionar:

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

En mi práctica Trabajo como esto:

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

puede probar este código, funciona perfectamente en un navegador:

Object.keys(object).length; 
2

Se puede utilizar el método que devuelve una matriz de propias propiedades enumerables de un objeto dado 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 
Cuestiones relacionadas