2011-10-12 1 views
3

나는 이렇게 끈의 명부가있다;배열에서 JS 반환 다음 끝없는 순환

var mystrings = [ 
    'apple', 
    'banana', 
    'orange' 
] 

나는 언제든지 다음 문자열을 얻기 위해 호출 할 수있는 함수를 원합니다. 그리고 목록의 끝에 도달하면 처음부터 다시 시작하십시오.

목록에서 순서대로 적용해야하는 CSS 클래스 목록에 사용하고 있지만 필요시 해당 목록을 반복하지 않습니다.

나는 그것을 알아낼 수 없으며 어떻게 든 구글에게는 어렵다. 아이디어가 있으십니까?

답변

6

여기에 재미 좀 함수의 :

function enumerator(array) { 
    var index = 0; 
    return function() { 
     return array[index++%array.length] 
    } 

} 

과 같이 전화가 :

var next = enumerator(["a", "b"]); 
next(); // a 
next(); // b 
next(); // a 
+0

Dang, 나를 이길. 이것이 올바른 해결책입니다. – lawnsea

+0

다른 해결책도 정확하지만이 컴팩트 한 스타일은 정말 아름답습니다. :) – freakish

-1

외부 인덱스 변수 및 증가를 사용하거나 호출 할 때마다 0으로 재설정

1
// Your array is declared in global scope 
var mystrings = [ 
    'apple', 
    'banana', 
    'orange' 
]; 

// A global index variable... 
var strIndex = 0; 
function getNextString() { 
    // If you reached the end of the array, reset to 0 
    if (strIndex === mystrings.length - 1) { 
     strIndex = 0; 
     return mystrings[strIndex]; 
    } 
    // Otherwise, increment it and return the new value 
    else return mystrings[++strIndex]; 
} 

// Call it as 
var currentString = getNextString(); 
+0

+ 1 그러나 인덱스를 반환합니다. 그리고 당신은'else'를 생략 할 수 있습니다. – pimvdb

+0

@pimvdb 이미 색인 반환을 수정했습니다. –

+0

+1 나는 올바른 대답이 downvoted 얻을 때 그것을 싫어 – Joe