Tengo una matriz asociativa en Javascript:
var dictionary = {
"cats": [1,2,3,4,5],
"dogs": [6,7,8,9,10]
};
¿Cómo obtengo las claves de este diccionario? es decir, quiero
var keys = ["cats", "dogs"];
Edite 7 años después: solo para obtener la terminología correcta, no existe una 'matriz asociativa' en Javascript, esto es técnicamente solo una object
y son las claves de objeto que queremos.
javascript
arrays
Simon_Weaver
fuente
fuente
Respuestas:
Puedes usar:
Object.keys(obj)
Ejemplo:
Consulte la referencia a continuación para obtener asistencia sobre el navegador. Es compatible con Firefox 4.20, Chrome 5, IE9. El siguiente enlace contiene un fragmento de código que puede agregar si
Object.keys()
no es compatible con su navegador.https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys
fuente
Prueba esto:
hasOwnProperty
es necesario porque es posible insertar claves en el objeto prototipo dedictionary
. Pero, por lo general, no desea incluir esas claves en su lista.Por ejemplo, si haces esto:
y luego haz un
for...in
bucledictionary
, obtendrása
yb
, pero también obtendrásc
.fuente
keys.push(key);
. Simplemente está tirando (y por lo tanto declarándolo) del espacio de nombres global. :)Es la declaración for..in .
fuente
dictionary.hasOwnProperty(key)
de lo contrario puede terminar con los métodos de la cadena de prototipos ..Solo una nota rápida, tenga cuidado de usar for..in si usa una biblioteca (jQuery, prototype, etc.), ya que la mayoría de ellos agregan métodos a los Objetos creados (incluidos los diccionarios).
Esto significará que cuando los recorra, los nombres de los métodos aparecerán como claves. Si está utilizando una biblioteca, mire la documentación y busque una sección enumerable, donde encontrará los métodos correctos para la iteración de sus objetos.
fuente
Sencilla forma JQUERY.
Esto es lo que uso
DictionaryObj, que es el objeto de diccionario de JavaScript que desea atravesar. valor, por supuesto, la clave son los nombres de ellos en el diccionario.
fuente
Actualmente estoy usando la respuesta de Rob de la Cruz
y en un archivo cargado al principio tengo algunas líneas de código prestadas de otras partes de Internet que cubren el caso de versiones antiguas de intérpretes de guiones que no tienen Object.keys incorporado.
Creo que esto es lo mejor de ambos mundos para proyectos grandes: código moderno simple y soporte compatible con versiones anteriores de navegadores, etc.
Efectivamente, pone la solución de JW en la función cuando Object.keys (obj) de Rob de la Cruz no está disponible de forma nativa.
fuente