TIL/3주차

개인 숙제

tnals634 2023. 5. 31. 15:51

어제 생각하고 잔 그 코드를 실행해봤는데 다행히 잘 나옵니다.

아래 코드가 부분검색과 대소문자 관계없이 검색이 가능합니다.

//검색한 영화제목 카드 찾기
function findCard(movietitle) {
    fetchJson(url).then((data) => {
        let rows = data.results;
        let resultMovie;
        let str1;
        let str2 = movietitle.toUpperCase();
        let count;
        rows.forEach((a) => {
            let t = a['title'];
            str1 = t.toUpperCase();
            count = str1.search(str2);
            console.log("count check : ",count);
            if(0 <= count){
                console.log(resultMovie);
                let id = a['id'];
                let title = a['title'];
                let image = `https://www.themoviedb.org/t/p/w500/${a['poster_path']}`;
                let overView = a['overview'];
                let rating = a['vote_average'];
                
                newCard(id, title, image, overView, rating, $mycards).then((div) => {
                    
                });
            }
        })
    })
}

 

grid를 시도중 튜터님이 검색할땐 모든 영화에서 검색을 가능하게 하라고 하셔서 시도중입니다.

 

국취제 면담을 갔다온 뒤 다시한번더 숙제를 확인하는데 전 엔터키를 html에서 onkeyup을 사용했는데 아닌거 같아 수정 했습니다.

//수정 전 엔터키 입력
function fnEnterkey(){
    if(window.event.keyCode == 13){
        checkCard($movieTitle.value);
    }
}
//수정 후 엔터키 입력
//엔터키 입력시 검색
document.addEventListener("keyup", function(event) {
    if (event.key === 'Enter') {
        checkCard($movieTitle.value);
    }
});

 

정영훈튜터님이 내주신 모든 영화에서 찾는것을 구현을 했는데 맞는지는 모르겠습니다.

원래 가져오는 url에서 page가 1인것을 확인하고 인터넷에서 찾아보니 다들 500페이지까지만 구하길래 501값을 넣어보니 없었습니다. 그래서 for문으로 500까지 돌리면서 url 의 page값에 다 대입을 해서 출력하게 했습니다.

//url 제일 뒤 page에 숫자를 안넣고 아래 fetchJson2함수에서 넣어줍니다.
let url2 = 'https://api.themoviedb.org/3/movie/top_rated?language=en-US&page=';

//전체에서 영화 찾는 url 패치
let fetchJson2 = async function (url , num) {
    try {
        let response = await fetch(url+`${num}`, options);
        let data = await response.json();
        return data;
    } catch (err) {
        console.error(err);
    }
}

//검색한 영화제목 카드 찾기
function findCard(movietitle) {
	//페이지가 500까지만 있어서 500까지 돌렸습니다.
    for(let i = 1; i <= 500; i++){
        fetchJson2(url2 , i).then((data) => {
            let rows = data.results;
            let resultMovie;
            let str1;
            let str2 = movietitle.toUpperCase();
            let count;
            rows.forEach((a) => {
                let t = a['original_title'];
                str1 = t.toUpperCase();
                count = str1.search(str2);
                if(0 <= count){
                    console.log(resultMovie);
                    let id = a['id'];
                    let title = a['title'];
                    let image = `https://www.themoviedb.org/t/p/w500/${a['poster_path']}`;
                    let overView = a['overview'];
                    let rating = a['vote_average'];
                    
                    newCard(id, title, image, overView, rating, $mycards);
                }
            })
        })
    }
}

테스트로 joker를 넣어보니 잘 나오는것을 확인했습니다.

 

 

검색을 계속 이것저것 해보니 제목과 검색과 다른 값이 있어 코드를 살펴 본 결과 original_title 값을 가져왔어야했는데 그냥 title 값을 가져와서 맞지 않았습니다. 그래서 title값을 original_title로 변경해줬습니다. 그리고 filter를 사용했습니다.

//검색한 영화제목 카드 찾기
function findCard(movietitle) {
    //이게 맞는지는 모르겠으나 일단 구현했습니다.
    //영화 페이지가 최대 500페이지라서 500까지 돌렸습니다.
    //for문을 돌려서 각 페이지마다 검색
    for(let pageNumber = 1; pageNumber <= 500; pageNumber++){
        fetchJson(url , pageNumber).then((data) => {
            let rows = data.results;
            let inputTitle = movietitle.toUpperCase();
            //filter로 변경
            let rowsTitle = rows.filter((value) => {
                let a = value['original_title'].toUpperCase();
                let count = a.search(inputTitle);
                if(-1 < count){
                    return value;
                }
            })
            rowsTitle.forEach((a) => {
                let id = a['id'];
                let title = a['original_title'];
                let image = `https://www.themoviedb.org/t/p/w500/${a['poster_path']}`;
                let overView = a['overview'];
                let rating = a['vote_average'];
                
                newCard(id, title, image, overView, rating, $mycards);
                    
            })
            
        })
    }
}
//모든 카드 출력
function allCard(){
    fetchJson(url,1).then((data) => {
        let rows = data.results;

        rows.forEach((a) => {
            let id = a['id'];
            //이부분도 title을 original_title로 변경
            let title = a['original_title'];
            let image = `https://www.themoviedb.org/t/p/w500/${a['poster_path']}`;
            let overView = a['overview'];
            let rating = a['vote_average'];

            newCard(id, title, image, overView, rating, $mycards);
        })
    });
}

변경하고 확인하니 잘 나왔습니다.

 

혹시 몰라 튜터님께 질문을 했는데 for문 말고 filter를 사용해야 한다고 하셔서 시도중입니다.

그 전체 페이지를 돌리는건 아직 for문으로 500개 다 돌리고, 그 안에서 filter로 찾아서 찾은 값을 forEach문을 돌려줬습니다.

 

저 500개 다 돌리는 것을 filter로 하라고 하신거 같은데 감이 오지 않습니다.

아니었습니다. 저렇게 for문 돌리는건 문제 없다고 하셨습니다.

 

아직 grid는 이해가 되지않아 진행중입니다.

 

면담을 다녀오느라 시간이 아직 차지않아서 grid는 잘 모르겠어서 일단 놨두고 프로그래머스 문제들을 풀고있습니다.

내일은 시간이 나면 공지에 올려주신 import와 export에 대해 공부하려 합니다.

 

참고자료
https://studiomeal.com/archives/533

 

이번에야말로 CSS Grid를 익혀보자

이 포스트에는 실제 코드가 적용된 부분들이 있으므로, 해당 기능을 잘 지원하는 최신 웹 브라우저로 보시는게 좋습니다. (대충 인터넷 익스플로러로만 안보면 된다는 이야기) 이 튜토리얼은 “

studiomeal.com

https://www.techiedelight.com/ko/detect-enter-key-press-javascript/

 

사용자가 JavaScript/jQuery로 Enter 키를 눌렀는지 감지

이 게시물은 JavaScript 및 jQuery에서 사용자가 Enter 키를 눌렀는지 여부를 감지하는 방법에 대해 설명합니다. 아이디어는 이벤트 핸들러를 keydown 또는 keyup JavaScript 이벤트를 열고 해당 핸들러를 사

www.techiedelight.com