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)