2012-11-30 4 views
0

S'il vous plaît voir mon code:Accumulez variable portée différente

function foo() { 
    var h = "start"; 
    $.each(some_array_of_objects, function() { 
     var name = 'middle';   
     h += name; 
    }); 
    h += "end"; 
    alert(h); 
} 

Je me attends à la chaîne accumulée dans mon alerte mais au lieu de cela, j'obtenu chaîne avec beaucoup de [object Object] chaînes. Est-il possible d'accumuler h variable de manière supérieure SANS utiliser des variables globales?

+1

Ceci est très probablement parce que '$ (this) [0] [ 'nom']' est un tableau. Pouvez-vous poster la valeur de la variable 'some_array_of_object'. –

+0

Veuillez envoyer le code à l'objet auquel 'this 'fait référence. –

+1

Vous n'utilisez pas de "variables globales". 'h' n'est disponible que dans le cadre de' function foo() '. Maintenant, pourriez-vous nous montrer le contenu de 'some_array_of_objects'? – Cerbrus

Répondre

0

Il n'est pas nécessaire d'utiliser jQuery pour faire une boucle entre les tableaux/objets, utilisez simplement une boucle for pour les tableaux et une for-in pour les objets. Cela fonctionne dans votre cas:

//Assuming the input array is something like this: 
some_array_of_objects = [[{name:'ABC'}],[{name:'I am a name'}],[{name:'Look at me!'}],[{name:'foo'}],[{name:'bar'}]] 

function foo() { 
    var h = "start"; 
    // Loop through the array. 
    for(var i = 0; i < some_array_of_objects.length; i++){ 
     var name = some_array_of_objects[i][0].name;   
     h += name; 
    } 
    h += "end"; 
    alert(h); 
} 
foo(); //Returns: "startABCI am a nameLook at me!foobarend" 
+0

OK, merci, mais quel est le problème avec mon code? Y a-t-il des restrictions sur la portée variable? –

+0

Je ne suis pas tout à fait sûr de ce que vous voulez dire par cette question. – Cerbrus