2010-03-23 13 views
13

Mam tablicę liczbdostać poprzednie i następne pozycje w tablicy

var projects = [ 645,629,648 ]; 

i numer 645

Muszę dostać następną (629) i prev (648) numery?

Czy mogę to zrobić z jquery?

+0

może pomóc: http://stackoverflow.com/questions/1058185/get-next-and-previous-elements-in-javascript-array –

+0

Czy mieszać swoje numery w górę? 648 nie jest poprzednią liczbą w tej tablicy. I co jest ważnego z użyciem pętli for, a następnie biorąc numer po każdej stronie indeksu, gdy znajdziesz żądany numer? – slugster

+1

@slugster - tak to * jest * poprzedni numer, gdy tablica jest okrągła! – Veger

Odpowiedz

42

Można uczynić go nieco krótszy ogólny korzystania jQuery $.inArray() method o 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]; 

Lub funkcji na podstawie:

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

Jaka jest zaleta używania '$ .inArray()' w porównaniu do 'indexOf()', nie widzę innego zachowania podczas przeglądania dostarczonej dokumentacji? (Po prostu ciekawy jak chciałbym się uczyć nowych rzeczy) – Veger

+2

@Veger - Myślę, że od pewnego czasu niektóre przeglądarki nie obsługiwały 'indexOf' w pewnym momencie (nie jestem pewien którego), użyje go wewnętrznie, jeśli jest obecny, w przeciwnym razie zostanie zapętlony i znajdzie go. –

+0

prawie, co chciałem, z wyjątkiem zachowania jest źle, jeśli wybiorę ostatni element i niech OSTATECZNA, idzie do pierwszego w tablicy. – HenryW

4

nie wiem o jQuery, ale jest to dość proste, aby stworzyć coś na własną rękę (zakładając, że masz zawsze niepowtarzalne numery w macierzy):

var projects = [ 645,629,648 ]; 

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

    return projects[index]; 
} 

Wywołanie next() z wieloma projektami zwraca kolejny numer projektu. Coś bardzo podobnego można zrobić dla funkcji prev().

2

Wystarczy tylko, aby posortować tablicę raz potem można po prostu użyć kodu począwszy od //start

Jeśli liczba nie jest obecny nie jest odtwarzany

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]); 
Powiązane problemy