itérer sur une carte en javascript
J'ai une structure comme ceci:
var myMap = {
partnr1: ['modelA', 'modelB', 'modelC'],
partnr2: ['modelA', 'modelB', 'modelC']
};
Je vais parcourir chacun des éléments (partnr) avec leur associatives (modèles).
Je suis en train d'essayer une double $chaque itération afin de parvenir à cela, mais rien ne se passe:
$.each(myMap, function (i, val) {
$.each(i, function (innerKey, innerValue) {
setTimeout(function () {
$('#variant').fadeOut("slow", function () {
$(this).text(innerKey + "-" + innerValue).fadeIn("slow");
});
}, i * 6000);
});
});
L'effet de décoloration et que je suis en train de réaliser fonctionne bien lors de l'utilisation d'un seul tableau de valeur (Objet), mais pas quand j'ai besoin d'avoir plus d'une valeur pour chaque touche comme ici.
Toutes les idées de la façon d'accomplir cette itération avec succès et il existe d'autres moyens que l'utilisation d'une carte qui serait mieux dans ce cas ?
Toute suggestion serait de l'intérêt.
Ce n'est pas un
Map
, mais un Object
.OriginalL'auteur user2374903 | 2013-05-12
Vous devez vous connecter pour publier un commentaire.
J'aimerais utiliser javascript standard:
Noter les différentes façons de traiter les objets et les tableaux.
Il est plus rapide et à mon avis plus propre. Et j'ai sauté le reste parce que c'est pas clair pour moi qu'il est censé faire. Qu'est-ce que #variante? Ce #variante au final?
#variante est un id d'une balise div qui va être montré (décoloré) avec les infos de la carte. Pour chaque partnr il devrait y avoir l'apparition d'une liste avec la corrensponding modèles.
OriginalL'auteur Atle
Le rappel à
$.each()
est passé le nom de la propriété et de la valeur, dans cet ordre. Vous êtes donc essayer de faire une itération sur les noms de propriété de l'appel intérieur à$.each()
. Je pense que vous voulez:Dans la boucle interne, étant donné un objet comme votre carte, les valeurs sont des tableaux. C'est OK, mais notez que le "innerKey" valeurs de tous les nombres.
modifier — Maintenant, une fois redressé, voici le problème suivant:
La première fois par le biais de cette boucle, le "je" sera la chaîne "partnr1". Ainsi, la multiplication tentative dans un
NaN
. Vous pouvez garder un compteur externe pour garder une trace de la propriété count de l'extérieur de la carte:non, elle ne saute pas à la dernière, même s'il semble le faire. Je n'avais pas regardé de plus près à la "setTimeout" appel, donc je vais ajouter à ma réponse.
En changeant la pcount de 1 à 0 (ce qui signifie qu'il commence à partir de la première boucle) le code a fonctionné, mais seulement comme montrant les modèles un par un. Mon erreur pour ne pas faire ce clair, le but est d'obtenir tous les modèles qui correspondent à partnumer montrant qu'une liste beeing s'est effacé.
OK: vous pouvez regarder ce fil pour les questions d'avenir
OriginalL'auteur Pointy
Ne pas utiliser des itérateurs pour ce faire. Maintenir votre propre boucle en incrémentant un compteur dans le rappel, et de manière récursive, à l'appel de l'opération sur l'élément suivant.
Si il y a une erreur de logique dans votre code. Vous êtes à la définition de la même contenant plus d'une valeur différente à (à peu près) le même temps. Peut-être vous dire à chacun de mettre à jour son propre conteneur.
Cela ressemble à une belle façon de le faire.
$.chaque(jArray, function(i, val) { setTimeout(function() { $('#reklame2').fadeOut("slow", function() { $(this).texte(val).fadeIn("slow"); }); $('#reklame17').fadeOut("slow", function() { $(this).texte(val).fadeIn("slow"); }); }, i * 6000); });
Quelle est l'intention? Chacun
partnr
mise à jour d'un récipient séparé, ou sont-ils tous destinés à fonctionner dans la séquence? Ou devrait-il êtrepartnr1[0] -> partnr2[0] -> partnr1[1] -> partnr2[1] -> etc
Désolé de ne pas établir clairement l'objet de l'itération. Pour chaque moment de la partnr montre TOUS les corrensponding modèles vont être fanée comme une liste en ce moment.
OriginalL'auteur