style recorrer objeto keys change attribute javascript json object

javascript - recorrer - title css



Cómo obtener la longitud del objeto (15)

¿Hay alguna función incorporada que pueda devolver la longitud de un objeto?

Por ejemplo, tengo a = { ''a'':1,''b'':2,''c'':3 } que debería devolver 3 . Si uso a.length devuelve undefined .

Podría ser una función de bucle simple, pero me gustaría saber si hay una función incorporada.

Hay una pregunta relacionada ( Longitud de un objeto JSON ): en la respuesta elegida, el usuario aconseja transformar el objeto en una matriz, lo cual no es muy cómodo para mi tarea.


¿Ha echado un vistazo a underscore.js ( http://underscorejs.org/docs/underscore.html )? Es una biblioteca de utilidad con muchos métodos útiles. Existe un método de size colección, así como un método toArray, que puede proporcionarle lo que necesita.

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


Aquí hay una función de jQuery-ised de la respuesta de Innuendo, lista para usar.

$.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; } } });

Se puede llamar así:

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


En jQuery lo he hecho de tal manera:

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


Entonces, uno no tiene que encontrar y reemplazar el método Object.keys, otro enfoque sería este código al principio de la ejecución del script:

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


Es posible que tenga una propiedad indefinida en el objeto. Si se usa el método de Object.keys(data).length esas propiedades también se contarán.

Es posible que desee filtrarlos.

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


Esto debería hacerlo:

Object.keys(a).length

Sin embargo, Object.keys no es compatible con IE8 y anteriores, Opera y FF 3.6 y anteriores.

Demostración en vivo: http://jsfiddle.net/simevidas/nN84h/


Para aquellos que vienen aquí para encontrar el recuento de elementos de algo que ya es un objeto jQuery :
.length es lo que estás buscando:

Ejemplo:

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


Para los navegadores que admiten Object.keys() , simplemente puede hacer:

Object.keys(a).length;

De lo contrario (especialmente en IE <9), puede recorrer el objeto con un bucle for (x in y) :

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

hasOwnProperty está ahí para asegurarse de que solo está contando las propiedades del objeto literal y no las propiedades que "hereda" de su prototipo.


Puede agregar otro nombre: valor par de longitud e incrementarlo / disminuirlo adecuadamente. De esta manera, cuando necesita consultar la longitud, no tiene que recorrer todas las propiedades de los objetos cada vez, y no tiene que depender de un navegador o biblioteca específica. Todo depende de tu objetivo, por supuesto.


Puede usar algo como Lodash lib y _.toLength (objeto) debería darle la longitud de su objeto


Resumiendo todos juntos, aquí hay una función universal (incluida la compatibilidad con 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


Se puede hacer fácilmente con $.map() :

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


Si desea evitar nuevas dependencias, puede crear sus propios objetos inteligentes. Por supuesto solo si quieres hacer más que solo obtener su tamaño.

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();


También se puede hacer de esta manera:

Object.entries(obj).length

Por ejemplo:

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


Una respuesta más:

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)