2010-06-02 10 views
84

var user = {};Cómo hacer un bucle de un objeto clave/valor en javascript

ahora Quiero crear un método setUsers que toma un objeto de par clave/valor e inicializa la variable user.

setUsers = function(data) { 

    // loop and init user 

} 

donde los datos es como:

234: "john", 23421: "smith", .... 
+3

¿Cómo se puede duplicar una pregunta anterior de una nueva? –

Respuesta

144

Cuidado con propiedades heredadas de prototipo del objeto (que podría suceder si está incluida cualquier biblioteca en su página, como versiones anteriores de Prototype). Puede verificar esto utilizando el método hasOwnProperty() del objeto. En general, es una buena idea cuando se usan los bucles for...in:

var user = {}; 

function setUsers(data) { 
    for (var k in data) { 
     if (data.hasOwnProperty(k)) { 
      user[k] = data[k]; 
     } 
    } 
} 
+2

¿Hay alguna forma de hacerlo sin un bucle for in? Estoy preocupado por la velocidad a través de grandes pares de valores clave (y sé que Crockford no es un fanático de usar JSLint, pero no estoy seguro de su razonamiento). ¿Hay alguna razón para preocuparse por estas cosas? – streetlight

+2

@streetlight: depende del entorno. Si puede confiar en tener ECMAScript 5 (todos los navegadores modernos lo hacen, como hace Node.js), tiene opciones como ['Object.keys()'] (https://developer.mozilla.org/en-US/ docs/JavaScript/Reference/Global_Objects/Object/keys). Si necesitas soportar IE <= 8, por ejemplo, estás atascado con 'for ... in'. –

9

Algo como esto:

setUsers = function (data) { 
    for (k in data) { 
     user[k] = data[k]; 
    } 
} 
55
for (var key in data) { 
    alert("User " + data[key] + " is #" + key); // "User john is #234" 
} 
Cuestiones relacionadas