2010-12-15 40 views
2

Je reste pour ma propre éducation veulent voir une version jQuery élégante d'une construction comme ça - Notez l'image les noms de fichiers sont basés sur 1 et non sur 0:Pour puriste de jQuery - remplissage de tableau simple?

var nofImages = 10; // user defined 
var slideShowArray = new Array(nofImages); // cannot use [nofImages] of course 
for (var i=0, n=slideShowArray.length;i<n;i++) { 
    slideShowArray[i]="/images/image"+(i+1)+".jpg"; 
} 

ou peut-être selon les articles mentionnés ci-dessus, il devrait être

var nofImages = 10; // user defined 
var slideShowArray = []; 
for (i=nofImages;i>0;i--) { 
    slideShowArray[(i-1)]="/images/image"+i+".jpg"; 
} 

Merci

Répondre

4
var slideShowArray = $.map(new Array(10), function(i,j) { 
    return '/images/image'+(j+1)+'.jpg'; 
}); 

En Javascript 1.8, vous serez en mesure de le faire plus élégamment:

var slideShowArray = $.map(new Array(10), function(i,j) '/images/image'+(j+1)+'.jpg'); 

ou même

$.range = function(first,last,step) { 
    step = step || 1; 
    if (typeof last == undefined) { 
     last = first; 
     first = 0; 
    } 
    return $.map(Array((first-last)/step), function(i,j) { 
     return j*step + first; 
    }); 
} 

var slideShowArray = ['/images/image'+i+'.jpg' for (i in $.range(1,10))]; 
+0

C'est plus ce que je cherchais. Dans votre exemple, le "i" n'est pas intéressant car il est juste un espace réservé nécessaire pour l'élément de tableau initialisé vide, non? – mplungjan

+0

En effet, le premier paramètre est l'élément de tableau, le second est l'indice de tableau. Vous pouvez écrire 'function (_, i) {... + (i + 1) + ...}' si vous aimez ce genre de choses. – Tgr

+0

Génial. Pas sûr que j'aime les versions 1.8 du tout .. Je veux mes accolades;) – mplungjan

2

Essayer d'être un puriste jquery vous pouvez essayer la méthode .map().

var noOfImages = 10; 
var slideShowArray = []; 
slideShowArray[noOfImages - 1] = ""; // set initial size 
slideShowArray = $.map(slideShowArray, function(element, index) { 
    return "/images/image"+index+".jpg" 
}); 

Mais je pense que ce serait plus simple:

var noOfImages = 10; 
var slideShowArray = []; 
for(var i = 0; i < noOfImages; i++) 
    slideShowArray.push("/images/image"+i+".jpg"); 

(Notez que vos exemples sont un peu cassés - réglage du tableau à [noOfImages] définit la longueur à 1.)

+0

Désolé. Mélangé mon initialiseur à partir du nouveau tableau (nofImages) et []. Cependant, votre second exemple est un autre exemple sans jquery. Il est cassé aussi;) Il n'utilise pas 1 noms d'images basés. Je voulais trouver un script de type jQuery plausible pour voir si c'était trop horrible à utiliser ou non;) – mplungjan

+0

"Initialiser" le tableau en définissant le dernier élément n'est pas sûr - le comportement actuel de la carte pourrait être de marcher à partir de 1 au dernier index, et ne pas ignorer les index non définis, mais il n'y a aucune promesse dans l'API jQuery de se comporter ainsi. – Tgr

+0

+1 pour la fonction de carte. TGR l'a cloué cependant. – mplungjan