2010-03-23 3 views
13

j'ai un tableau de nombresobtenir prev et éléments suivants dans le tableau

var projects = [ 645,629,648 ]; 

et un numéro 645

je besoin pour les prochaines (629) et prev (648) chiffres?

Puis-je le faire avec jquery?

+0

peut-être l'aide: http://stackoverflow.com/questions/1058185/get-next-and-previous-elements-in-javascript-array –

+0

Avez-vous mélangé vos numéros jusqu'à? 648 n'est pas le nombre précédent dans ce tableau. Et ce qui est usé avec l'utilisation d'une boucle for, puis en prenant le nombre de chaque côté de l'index lorsque vous trouvez le nombre désiré? – slugster

+1

@slugster - oui c'est * le numéro précédent lorsque le tableau est circulaire! – Veger

Répondre

42

Vous pouvez le rendre un peu plus court en utilisant l'ensemble jquery de $.inArray() method avec un module:

var p = [ 645,629,648 ]; 
var start = 645; 
var next = p[($.inArray(start, p) + 1) % p.length]; 
var prev = p[($.inArray(start, p) - 1 + p.length) % p.length]; 

Ou, fonction basée:

function nextProject(num) { 
    return p[($.inArray(num, p) + 1) % p.length]; 
} 
function prevProject(num) { 
    return p[($.inArray(num, p) - 1 + p.length) % p.length]; 
} 
+0

Quel est l'avantage d'utiliser '$ .inArray()' par rapport à 'indexOf()', je ne vois pas de comportement différent en regardant la documentation fournie? (Juste curieux que je voudrais apprendre de nouvelles choses) – Veger

+2

@Veger - Je suppose que certains navigateurs ne supportent pas 'indexOf' à un moment donné (je ne sais pas lequel), il va l'utiliser en interne si elle est présente, Sinon, il va faire une boucle et le trouver. –

+0

presque ce que je voulais, sauf que le comportement est mauvais, si je choisis le dernier élément et le laisser vérifier pour LAST, il va en premier dans le tableau. – HenryW

4

Je ne sais pas jQuery, mais il est assez simple de créer quelque chose sur votre propre (en supposant que vous avez un nombre toujours unique dans votre tableau):

var projects = [ 645,629,648 ]; 

function next(number) 
{ 
    var index = projects.indexOf(number); 
    index++; 
    if(index >= projects.length) 
     index = 0; 

    return projects[index]; 
} 

Appel next() avec un numéro de projet renvoie le prochain numéro de projet. Quelque chose de très similaire peut être fait pour la fonction prev().

2

Il vous suffit de trier le tableau une fois par la suite, vous pouvez simplement utiliser le code à partir de //start

Si le numéro ne présente rien est sortie

var projects = [ 645, 629, 648 ], number = 645, i = -1; 
projects.sort(function(a, b) { 
    return a > b ? 1 : -1; 
}); 
//start 
i = projects.indexOf(number); 
if(i > 0) 
    alert(projects[i-1]); 
if(i < (projects.length - 1) && i >= 0) 
    alert(projects[i+1]); 
Questions connexes