property - ¿Cómo iterar(claves, valores) en javascript?
object.keys map (9)
tl; dr
- En ECMAScript 5, no es posible.
-
En ECMAScript 2015, es posible con
Map
s. - En ECMAScript 2017, estaría fácilmente disponible.
ECMAScript 5:
No, no es posible con objetos.
Deberías iterar con
for..in
u
Object.keys
, como este
for (var key in dictionary) {
// check if the property/key is defined in the object itself, not in parent
if (dictionary.hasOwnProperty(key)) {
console.log(key, dictionary[key]);
}
}
Nota:
La condición
if
anterior es necesaria, solo si desea iterar las propiedades que son propias del objeto del
dictionary
.
Porque
for..in
a través de todas las propiedades enumerables heredadas.
O
Object.keys(dictionary).forEach(function(key) {
console.log(key, dictionary[key]);
});
ECMAScript 2015
En ECMAScript 2015, puede usar objetos
Map
e
Map.prototype.entries
con
Map.prototype.entries
.
Ejemplo de cita de esa página,
var myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");
var mapIter = myMap.entries();
console.log(mapIter.next().value); // ["0", "foo"]
console.log(mapIter.next().value); // [1, "bar"]
console.log(mapIter.next().value); // [Object, "baz"]
O iterar con
for..of
, así
''use strict'';
var myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");
for (const entry of myMap.entries()) {
console.log(entry);
}
Salida
[ ''0'', ''foo'' ]
[ 1, ''bar'' ]
[ {}, ''baz'' ]
O
for (const [key, value] of myMap.entries()) {
console.log(key, value);
}
Salida
0 foo
1 bar
{} baz
ECMAScript 2017
ECMAScript 2017 introduciría una nueva función
Object.entries
.
Puede usar esto para iterar el objeto como desee.
''use strict'';
const object = {''a'': 1, ''b'': 2, ''c'' : 3};
for (const [key, value] of Object.entries(object)) {
console.log(key, value);
}
Salida
a 1
b 2
c 3
Tengo un diccionario que tiene el formato de
dictionary = {0: {object}, 1:{object}, 2:{object}}
¿Cómo puedo recorrer este diccionario haciendo algo como
for((key,value) in dictionary){
//Do stuff where key would be 0 and value would be the object
}
Como una mejora a la respuesta aceptada, para reducir el anidamiento, puede hacer esto en su lugar:
for (var key in dictionary) {
if (!dictionary.hasOwnProperty(key)) {
continue;
}
console.log(key, dictionary[key]);
}
Creo que la manera rápida y fácil es
Object.entries(event).forEach(k => {
console.log("properties ... ", k[0], k[1]); });
solo revise la documentación Object.entries
El método
Object.entries()
se ha especificado en ES2017 (y es
compatible con todos los navegadores modernos
):
for (const [ key, value ] of Object.entries(dictionary)) {
// do something with `key` and `value`
}
Explicación:
-
Object.entries()
toma un objeto como{ a: 1, b: 2, c: 3 }
y lo convierte en una matriz de pares clave-valor:[ [ ''a'', 1 ], [ ''b'', 2 ], [ ''c'', 3 ] ]
. -
Con
for ... of
podemos recorrer cada entrada de la matriz así creada. -
Dado que tenemos la garantía de que cada uno de los elementos de la matriz iterada es otra matriz de dos entradas, podemos usar la destructuring para asignar directamente la
key
y elvalue
variables a su primer y segundo elemento.
Prueba esto:
var value;
for (var key in dictionary) {
value = dictionary[key];
// your code here...
}
Prueba esto:
dict = {0:{1:''a''}, 1:{2:''b''}, 2:{3:''c''}}
for (var key in dict){
console.log( key, dict[key] );
}
0 Object { 1="a"}
1 Object { 2="b"}
2 Object { 3="c"}
Puedes hacer algo como esto:
dictionary = {''ab'': {object}, ''cd'':{object}, ''ef'':{object}}
var keys = Object.keys(dictionary);
for(var i = 0; i < keys.length;i++){
//keys[i] for key
//dictionary[keys[i]] for the value
}
Puedes usar el siguiente script.
var obj={1:"a",2:"b",c:"3"}; for (var x=Object.keys(obj),i=0;i<x.length,key=x[i],value=obj[key];i++){ console.log(key,value); }
salidas
1 a
2 b
c 3
usando swagger-ui.js
Puedes hacerlo -
_.forEach({ ''a'': 1, ''b'': 2 }, function(n, key) {
console.log(n, key);
});