Como obter o comprimento do object

Existe alguma function interna que pode retornar o comprimento de um object?

Por exemplo, eu tenho a = { 'a':1,'b':2,'c':3 } que deve retornar 3 . Se eu usar a.length ele retorna undefined .

Pode ser uma function de loop simples, mas gostaria de saber se existe uma function incorporada?

Há uma questão relacionada ( Comprimento de um object JSON ) – na resposta escolhida, o usuário aconselha a transformar o object em uma matriz, o que não é muito confortável para a minha tarefa.

Para navegadores que suportam Object.keys (), você pode simplesmente fazer:

 Object.keys(a).length; 

Caso contrário (notavelmente no IE <9), você pode percorrer o objeto com um loop for (x in y) :

 var count = 0; var i; for (i in a) { if (a.hasOwnProperty(i)) { count++; } } 

O hasOwnProperty está lá para garantir que você esteja contando apenas as propriedades do literal do object e não as propriedades que ele “herda” de seu protótipo.

Isso deve servir:

 Object.keys(a).length 

No entanto, Object.keys não é suportado no IE8 e abaixo, Opera e FF 3.6 e abaixo.

Demonstração ao vivo: http://jsfiddle.net/simevidas/nN84h/

Pode ser feito facilmente com $.map() :

 var len = $.map(a, function(n, i) { return i; }).length; 

Você já deu uma olhada no underscore.js ( http://underscorejs.org/docs/underscore.html )? É uma biblioteca de utilidades com muitos methods úteis. Existe um método de size coleção, bem como um método toArray, que pode obter o que você precisa.

 _.size({one : 1, two : 2, three : 3}); => 3 

Resumindo todos juntos, aqui está uma function universal (incluindo o suporte ie8):

 var objSize = function(obj) { var count = 0; if (typeof obj == "object") { if (Object.keys) { count = Object.keys(obj).length; } else if (window._) { count = _.keys(obj).length; } else if (window.$) { count = $.map(obj, function() { return 1; }).length; } else { for (var key in obj) if (obj.hasOwnProperty(key)) count++; } } return count; }; document.write(objSize({ a: 1, b: 2, c: 3 })); // 3 

Em jQuery eu fiz isso de uma maneira:

 len = function(obj) { var L=0; $.each(obj, function(i, elem) { L++; }); return L; } 

Portanto, não é preciso encontrar e replace o método Object.keys, outra abordagem seria esse código no início da execução do script:

 if(!Object.keys) { Object.keys = function(obj) { return $.map(obj, function(v, k) { return k; }); }; } 

Aqui está uma function jQuery-ised da resposta da Innuendo, pronta para uso.

 $.extend({ keyCount : function(o) { if(typeof o == "object") { var i, count = 0; for(i in o) { if(o.hasOwnProperty(i)) { count++; } } return count; } else { return false; } } }); 

Pode ser chamado assim:

 var cnt = $.keyCount({"foo" : "bar"}); //cnt = 1; 

Mais uma resposta:

 var j = '[{"uid":"1","name":"Bingo Boy", "profile_img":"funtimes.jpg"},{"uid":"2","name":"Johnny Apples", "profile_img":"badtime.jpg"}]'; obj = Object.keys(j).length; console.log(obj) 

Para aqueles que vêm aqui para encontrar a contagem de itens de algo que já é um object jQuery :
Comprimento é o que você está procurando:

Exemplo:

 len = $('#divID').length; alert(len); 

Se você quiser evitar novas dependencies, poderá criar seus próprios objects inteligentes. Claro, só se você quiser fazer mais do que apenas o tamanho.

 MyNeatObj = function (obj) { var length = null; this.size = function () { if (length === null) { length = 0; for (var key in obj) length++; } return length; } } var thingy = new MyNeatObj(originalObj); thingy.size(); 

Você pode ter uma propriedade indefinida no object. Se usar o método de Object.keys(data).length for usado, essas propriedades também serão contadas.

Você pode querer filtrá-los para fora.

 Object.keys(data).filter((v) => {return data[v] !== undefined}).length 

Também pode ser feito desta maneira:

 Object.entries(obj).length 

Por exemplo:

 let obj = { a: 1, b: 2, }; console.log(Object.entries(obj).length); //=> 2 // Object.entries(obj) => [ [ 'a', 1 ], [ 'b', 2 ] ] 

Você pode adicionar outro nome: valor par de comprimento e incrementar / decrementar apropriadamente. Dessa forma, quando você precisa consultar o tamanho, não é necessário percorrer todas as propriedades dos objects e não precisa depender de um navegador ou biblioteca específica. Tudo depende do seu objective, claro.

Você pode usar algo como lodash lib e _.toLength (object) deve dar-lhe o comprimento do seu object