2013-06-14 3 views
1

저는 JS를 배우므로 각 질문마다 네 가지 가능한 답이있는 퀴즈 게임을해야합니다. 질문은 나에게 질문을 구분하는 문자열 "#"과 ID, 텍스트 및 정답에서 각 질문을 구분하는 "@"로 표시됩니다. 답변 : 비슷한 형식의 문자열이 있습니다. idQuestion @ idAnswer @ textOfAnswer # 나는 매우 불안정한 방법으로 (나는 4 개의 배열을 사용하고 있습니다!). 그러나 다른 방법을 생각할 수는 없습니다. 그것을하기 위해.인덱스 배열 내에서 연관 배열을 반복합니다.

var indexAnswers = strAnswers.split("#"); 
var auxArray = new Array(); 
var auxArray2 = new Array(); 
var assocAnswers = new Array(); 
for (var b=0; b<indexAnswers.length; b++){ 
    auxArray = indexAnswers[b].split("@"); 
    auxArray2 = { 
     "idQuestion":auxArray[0], 
     "idAnswer":auxArray[1], 
     "txtAnswer":auxArray[2] 
    } 
    assocAnswers.push(auxArray2); 
} 
: 나는 대답을 포함하는 문자열에서 시작하고, 인덱스 대답에 저장되어있는 "연관 배열", 각 대답을 변환 곳 이것은 ... 코드입니다 XD (WTF) assocAnswers라고

idQuestion (색인 배열의 한 요소를 차지하는 각 "연관 배열"의 첫 번째 키) 값이 x 숫자와 같은지 확인하는 방법을 알고 싶습니다. 일단 내가 확인했으면 idQuestion과 일치하는 나머지 3 개의 대답을 찾아야하고 div에 4 개의 대답을 표시해야합니다 (따라서 txtAnswer 키의 값을 표시해야 함), 각 답변은 <label> 라디오 안에 있습니다 입력,하지만 생각합니다 jQuery 부분에 도움이 필요하지 않습니다. BTW, 나는 for ... in을 아직 배웠지 않습니다. 누군가가 가능한 솔루션을 사용한다면, 그 어떤 설명도 환영 할 것입니다 : P Thanks!

편집 : 영어 strQuestions의 예 (strAnswers 스페인어에 남아) :

var strQuestions = "[email protected] is a function without parameters [email protected]#" 
+ "[email protected] of the next invocations is [email protected]#" 
+ "[email protected] a function: myFunction(a,b) Which is the correct [email protected]#"; 

var strAnswers = 
"[email protected]@ function:myFunction()#[email protected]@ function myFunction()#[email protected]@ declare myFunction()#[email protected]@ new myFunction#[email protected]@Resultado=myFunction#[email protected]@Call myFunction()#[email protected]@myFunction#[email protected]@Resultado=myFunction()#[email protected]@MiFuncion a,b#[email protected]@a=MiFuncion(b)#[email protected]@MiFuncion(x,y)#[email protected]@Ninguna de las anteriores# 
+1

당신이 전달되는 일부 동일한 데이터를 제공 할 수 있습니다에 저장됩니다? – Justin

+0

데이터를 게시 할 예정이지만 스페인어로되어 있습니다 ... 같은 질문에 대한 답변은 동일한 idQuestion을 사용하지만 idAnswer가 다르므로 1에서 4까지의 숫자를 사용하십시오. – user2484181

답변

0

하지만,이 바이올린 켜는 사람은 당신이 그것을 구문 분석 할 수있는 방법을 보여줍니다 당신이 작업 할 수 있도록이 객체의 배열로 변 더 쉽습니다. 또한 컬렉션과 요소의 ID를 기반으로 요소를 쉽게 찾을 수있는 방법이 있습니다.

for 루프의 경우 더 좋은 방법이있을 수 있지만 지금은 내 머리 꼭대기에서 벗어날 수는 없습니다. 내가 기억할 수 있다면 그것을 업데이트 할 것이다.

JSfiddler.

참고 : anwserId이 .key 재산

0

이인가 당신이 찾고있는 무엇?

var indexAnswers = strAnswers.split("#"); 
var auxArray = new Array(); 
var auxArray2 = new Array(); 
var assocAnswers = new Array(); 
for (var b=0; b<indexAnswers.length; b++){ 
    auxArray = indexAnswers[b].split("@"); 
    if (auxArray[0].toString() == someId.toString()) { 
     ... Fill your page 
    } 
} 
+0

음, 그렇게 생각하지 않습니다. 내가 올바르게 이해했다면, 코드는 모든 최종 데이터를 인덱싱 된 배열에 저장합니다. 그렇지 않습니까? 좋아요 : 'auxArray = (1,1, 텍스트, 1,2, 텍스트 ...); ' "연관 배열"을 사용하면 더 효율적이라고 생각합니다. 어쨌든 고마워! : D – user2484181

+0

은 실제로 여기서 저장소를 수행하지 않고 [0]과 x 번호 (someId)를 비교하여 페이지에 표시 할 항목을 찾는 테스트입니다. 하지만 이봐, elclanrs로부터 이미 좋은 대답이있다. – JoseTeixeira

1

나는 매우 위태로운 방법으로 그것을했다 알고 ... 내가 제대로 문제를 이해한다면 나를 볼

하자 (나는 4 개 배열을 사용하고 있습니다! ._.), 하지만, 나는 그것을 할 수있는 또 다른 방법을 생각할 수 없다. 값 쌍 :

var data = '[email protected]@hello#[email protected]@foo#[email protected]@world'; 

var questions = data.split('#').map(function(q) { 
    q = q.split('@'); 
    return { 
    idQuestion: q[0], 
    idAnswer: q[1], 
    text: q[2] 
    }; 
}); 

이제 키 개체가 있습니다. 이것은 당신이 어떤 기준으로 필터링 할 수있는 방법이다 : 그것을 쓰는 동안 나는 꽤 게으른있어

var filteredQuestions = questions.filter(function(q) { 
    return q.idQuestion == 1; 
}); 

console.log(filteredQuestions); //=> [{...text: "hello"}, {...text: "world"}] 
+0

'.map'과'.filter'를 몰랐다. jsFiddle에 코드를 복사하고'alert.'에 대한'console.log'를 변경하면'[object, Object], [object, Object]'가 표시됩니다. 내가 여러분의 코드를 이해했기 때문에 주석 부분에 쓴 것처럼 "hello", "world"를 표시하면 안됩니까? 감사! – user2484181

+0

'filteredQuestions'는'idQuestion'에 의해 필터링 된 두 객체를 포함합니다. 이 질문들의 텍스트를 원하면'map'을 다시 사용하고'text'를 반환해야합니다. – elclanrs

+0

자, 코드를 완전히 이해하려고 노력할 것입니다. (함수를 선언 한 방식과 사용 된 방법이 완전히 새로운 **입니다.) 어떻게 든 구현할 수 있습니다. 시간 내 줘서 고마워! – user2484181