배열 만들기
사용자가 버튼을 선택할 때마다
배열의 내용을 추가해준다.
const select = [];
위와 같이 select라는 Array를 생성한다.
특정 답변을 선택했을 때 지정된 값이 반환되도록 해주기
for 문 내에서 생성된 i도 parameter로 넣어서 몇 번째인지 체크해줄수 있도록 한다.
for(let i in qnaList[qIdx].a){
addAnswer(qnaList[qIdx].a[i].answer, qIdx, i);
}
qnaList를 for문으로 생성할 때
addAnswer 함수를 호출하는데,
parameter에 for 문의 i 를 추가해준다.
호출할 때 i를 추가해줬으니
addAnswer함수를 정의해줄 때도
i가 parameter로 들어가야한다.
function addAnswer(answerText, qIdx, idx)
...
setTimeout(() =>{
select[qIdx] = idx;
for(let i = 0; i< children.length; i++){
children[i].style.display = 'none';
}
goNext(++qIdx);
select[qIdx] = idx;
이 부분도 잘 이해안되지만 일단 패스...
goresult 함수에서 콘솔창에 출력되도록 아래와 같이 작성하고 확인해본다.
console.log(select);
select 배열이 잘 생성되었다.
답변에 따라 value를 1씩 증가시켜 결과 도출하기
function calResult(){
var pointArray = [
{name: 'mouse', value: 0, key: 0},
...
{name: 'pig', value: 0, key: 11},
]
for(let i = 0; i < endPoint; i++){
var target = qnaList[i].a[select[i]];
for(let j = 0; j < target.length; j++){
for(let k = 0; k < pointArray.length; k++){
if(target.type[j] === pointArray[k].name){
pointArray[k].value += 1;
결과를 계산하는 calResult 함수를 생성한다.
pointArray라는 배열을 만들어
각 결과값인 name과 value, key를 생성한다.
여기서 for문이 세 번 사용되는데
i for문에서는 선택한 답변을 target으로 생성한다.
예를 들면, 첫 번째 답변을 골랐다면
{answer : a 이성사이에 ~ 'chick']}까지 선택된다.
=> js파일끼리는 따로 호출을 안해도 사용할 수 있는듯?
for(let i = 0; i < endPoint; i++){
var target = qnaList[i].a[select[i]];
for(let j = 0; j < target.length; j++){
for(let k = 0; k < pointArray.length; k++){
if(target.type[j] === pointArray[k].name){
pointArray[k].value += 1;
j for문에서는 선택한 답변 내에서
type의 array를 for문으로 끝까지 읽어준다.
예를 들면 이 답변을 선택했다고 하면
target.type[] 안의 'cow'부터 'chick'까지
for k 반복문을 통해 pointArray의 mouse~pig까지 체크하며
동일한 경우 해당 pointArray의 value값을 1씩 증가시킨다.
여기서 궁금한 점은 j for문인데...
target.length라고만 해도 type부분의 끝까지
작동되는 것인지.
tartget이라는 array속에 있는 array까지 자동으로 length에 포함되는 것인지?
일단은 패스하고 나중에 다시 생각해본다.
=> 강의 뒷부분에 수정함.
=> target.type.length로 !!
sort
var resultArray = pointArray.sort(function(a,b){
if(a.value > b.value){
return -1;
}
if(a.value < b.value){
return 1;
pointArray를 value 값 기준으로 정렬해준다.
let resultword = resultArray[0].key;
return resultword;
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
Array.prototype.sort() - JavaScript | MDN
The sort() method sorts the elements of an array in place and returns the reference to the same array, now sorted. The default sort order is ascending, built upon converting the elements into strings, then comparing their sequences of UTF-16 code units val
developer.mozilla.org
이해가 잘 안되므로 나중에 mozilla 의 javascript sort페이지를 다시 읽어본다.
이전 에러 수정
function goNext(qIdx){
if(qIdx === endPoint){
영상 9분부터
sort 로 정렬된 값 확인하기
다음영상에서는
가장많은 value값을 가진 결과를
결과로 출력하도록 한다.
'MBTI 테스트 프로젝트' 카테고리의 다른 글
[MBTI 테스트(12)] Meta 태그 수정하기 + netlify로 배포하기 + netlify와 깃허브github 연동하기 (0) | 2023.05.06 |
---|---|
[MBTI 테스트(11)] 알고리즘 개선하기 (0) | 2023.04.16 |
[MBTI 테스트(9)] Result 구현하기 (0) | 2023.04.15 |
[MBTI 테스트(8)] 진행상태바 구현하기 (colorzilla에서 다양한 색깔 가져오기) (0) | 2023.04.15 |
[MBTI 테스트(7)] 판다코딩 유튜브_ QnA 꾸미기 (css 애니메이션으로 나타나기, 사라지기 효과 + class 추가 시에 애니메이션 함께 나타나게하기) (0) | 2023.04.15 |