Longitud de un objeto JavaScript
Tengo un objeto JavaScript. ¿Existe una forma de mejores prácticas integrada o aceptada para obtener la longitud de este objeto?
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
Respuesta actualizada
Aquí hay una actualización de 2016 y una implementación generalizada de ES5 y más allá. Para IE9+ y todos los demás navegadores modernos compatibles con ES5+, puede utilizarlo Object.keys()
para que el código anterior se convierta en:
var size = Object.keys(myObj).length;
Esto no tiene que modificar ningún prototipo existente ya que Object.keys()
ahora está integrado.
Editar : los objetos pueden tener propiedades simbólicas que no se pueden devolver mediante el método Object.key. Entonces la respuesta estaría incompleta sin mencionarlos.
Se agregó el tipo de símbolo al lenguaje para crear identificadores únicos para las propiedades del objeto. El principal beneficio del tipo Símbolo es la prevención de sobrescrituras.
Object.keys
o Object.getOwnPropertyNames
no funciona para propiedades simbólicas. Para devolverlos es necesario utilizar Object.getOwnPropertySymbols
.
var person = {
[Symbol('name')]: 'John Doe',
[Symbol('age')]: 33,
"occupation": "Programmer"
};
const propOwn = Object.getOwnPropertyNames(person);
console.log(propOwn.length); // 1
let propSymb = Object.getOwnPropertySymbols(person);
console.log(propSymb.length); // 2
respuesta anterior
La respuesta más sólida (es decir, que capture la intención de lo que intenta hacer y al mismo tiempo cause la menor cantidad de errores) sería:
Object.size = function(obj) {
var size = 0,
key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
// Get the size of an object
const myObj = {}
var size = Object.size(myObj);
Hay una especie de convención en JavaScript según la cual no se agregan cosas a Object.prototype porque puede romper enumeraciones en varias bibliotecas. Sin embargo, agregar métodos a Object suele ser seguro.
Si sabes que no tienes que preocuparte por hasOwnProperty
las comprobaciones, puedes usar el método Object.keys() de esta manera:
Object.keys(myArray).length
Actualizado : si estás usando Underscore.js (recomendado, ¡es liviano!), entonces puedes hacerlo
_.size({one : 1, two : 2, three : 3});
=> 3
Si no es así , y no quieres perder el tiempo con las propiedades del objeto por cualquier motivo, y ya estás usando jQuery, hay un complemento igualmente accesible:
$.assocArraySize = function(obj) {
// http://stackoverflow.com/a/6700/11236
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};