Longitud de un objeto JavaScript

Resuelto Gareth Simpson asked hace 16 años • 44 respuestas

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;
Gareth Simpson avatar Aug 08 '08 02:08 Gareth Simpson
Aceptado

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.keyso Object.getOwnPropertyNamesno 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
Expandir fragmento

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);
Expandir fragmento

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.


 avatar Aug 09 '2008 08:08

Si sabes que no tienes que preocuparte por hasOwnPropertylas comprobaciones, puedes usar el método Object.keys() de esta manera:

Object.keys(myArray).length
aeosynth avatar Apr 03 '2011 01:04 aeosynth

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;
};
ripper234 avatar Jul 05 '2012 14:07 ripper234