2011-07-01 3 views
0

Je:carte jquery - affecter la valeur de retour en tant que clé de l'objet de réception

<img class="images" src="src1"> 
    <img class="images" src="src2"> 
    <img class="images" src="src3"> 
    <img class="images" src="src4"> 

var pictures = $(".images").map(function(){ 
    return $(this).attr("src"); 
}) 

Le code ci-dessus crée un nouveau tableau de photos. Pouvez-vous penser à un moyen efficace de créer un nouvel objet images en utilisant la fonction de carte jQuery. Je voudrais faire quelque chose comme:

var pictures[key] = $(".images").map(function(){ 
    var key = $(this).attr("src"); 
    return key; 
}) 

... affecter directement la valeur de retour en tant que clé de l'objet images. Y a-t-il un moyen?

Répondre

2

Ne pouvez-vous pas itérer la collection?

var picObj = {}; 
$(".images").each(function() { 
    picObj[$(this).attr("src")] = '...'; 
}); 

(demo - imprimera à la console)

+1

oui, je pourrais ... mais je pensais qu'il pourrait y avoir un truc cool en utilisant la carte ... – Hans

+0

@Marcel 'map' sera toujours s crée un tableau. C'est votre truc * cool. – kapa

1

Je ne comprends pas exactement ce que vous cherchez, mais vous pouvez faire quelque chose comme ceci:

var pictures = []; 

    $(".images").each(function(){ 
    var src = $(this).attr("src"); 
    var img = $('<img>', { src: src}); 
    pictures.push(img) 

}) 

et images est un tableau d'objets image

+0

est-ce possible? Je pensais que la carte est toujours destinée à retourner quelque chose ... dans votre exemple, je pourrais juste remplacer la carte avec chacun, je ne pourrais pas? – Hans

+0

@Narcel Vous pourriez. Utiliser 'map' ici est complètement dénué de sens et trompeur. – kapa

+0

@Marcel oui, peut-être que vous devriez le remplacer par chacun! :) –

Questions connexes