J'essaie d'utiliser une table de hachage pour pouvoir sélectionner un objet spécifique stocké dans un tableau/objet. Cependant, j'ai un problème pour boucler un objet.
var pins= {};
pins[6] = '6';
pins[7] = '7';
pins[8] = '8';
$('#result3').append('<div>Size: ' + Object.size(pins) + '</div>');
for(var i = 0; i < Object.size(pins); i++) {
$('#result3').append('<div>' + pins[i] + '</div>');
}
JSFiddle : http://jsfiddle.net/7TrSU/
Comme vous pouvez le voir dans TEST 3
Qui utilise l'objet pin
pour stocker les données, j'obtiens undefined
lors de la boucle à travers l'objet pin
.
Quelle est la bonne façon de parcourir pin
?
[~ # ~] modifier [~ # ~]
Que se passe-t-il si au lieu de simplement pin[6] = '6'
, Je crée pin [6] = un objet et je veux parcourir toutes leurs propriétés id
? Extrait de code réel de ce que je fais ...
for(var i = 0; i < json.length; i++) {
markerId = json[i].listing_id
// Place markers on map
var latLng = new google.maps.LatLng(json[i].lat, json[i].lng);
var marker = new google.maps.Marker({
listing_id: markerId,
position: latLng,
icon: base_url + 'images/template/markers/listing.png',
});
markers[markerId] = marker;
}
for(var marker in markers) {
console.log('marker ID: ' + marker.listing_id);
mc.addMarker(marker);
}
Le console.log
Ci-dessus renvoie undefined, et si je fais console.log(marker)
à la place, j'obtiens la valeur de marker.listing_id
. Désolé je m'embrouille!
J'ai réussi à le faire fonctionner avec $.each(markers, function(i, marker){});
mais pourquoi le for..in
Ci-dessus ne fonctionne-t-il pas?
N'utilisez pas de boucle for(i=0; i<size; i++)
. Utilisez plutôt:
Object.keys(pins)
pour obtenir une liste de propriétés et la parcourir, oufor ( key_name in pins)
en conjonction avec Object.hasOwnProperty
(pour exclure les propriétés héritées) pour parcourir les propriétés.Le problème de votre troisième cas de test est qu'il lit les valeurs des clés 0, 1 et 2 (au lieu de 6, 7, 8).
var hash = {}
hash[key] = value
Object.keys(hash).forEach(function (key) {
var value = hash[key]
// iteration code
})
Puisque vous utilisez jQuery:
jQuery.each(pins, function (name, value) {
$('#result3').append('<div>' + name + "=" + value + '</div>');
});
function iterate(obj){
var keys = Object.keys(obj);
for(i in keys){
doSomething(obj[keys[i]].id);
}
}
Cela itère sur le id
de tous les champs dans n'importe quel objet
Essaye ça:
for (var pin in pins) {
$('#result3').append('<div>' + pin + '</div>');
}