2010-04-22 3 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-ассоциативный массив –

+0

Кто-то хочет отредактировать его для чтения объекта вместо массива? –

ответ

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

Возможно, стоит проверить свойство '__count__' Mozilla перед итерацией по объекту ... – James

+2

@JP:' __count__' помечается как устаревший для Gecko 1.9.3 (в Gecko 1.9.3a5pre, (Firefox 3.7a5pre) он doesn 't существует больше) – CMS

+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 ") возвращает Object.keys (obj) .length;' – CMS

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