어쩌다 알게 된 ƪ(•̃͡•̃͡ ƪ

🟦 [React] 검색 기능 구현해보기 2 본문

개발/🟦 React

🟦 [React] 검색 기능 구현해보기 2

비니_ 2025. 3. 24. 10:13
728x90

이전 로그👇

 

🟦 [React] 검색 기능 구현해보기

구현 하려는 동작=> 검색어를 받아와서 해당 탭의 데이터와 검색어가 일치하는 값을 출력 문제점=> 일단 해당 값을 출력하는건 되었는데, 그 값이 없는 배열들이 빈 배열로 출력되고 있음 해야

dazzle-bini.tistory.com

 

 

728x90

 

✔ 구현하려는 기능: 저 상태에서 이제 해당하는 문자가 있는 배열을 가져오고 싶다.

추가 코드👇

// 검색 결과가 있는 데이터 배열만 필터링
const result =  extractedValues[activeTab].filter(data => data.some(value => value === keyword));

 

 

 

 

그 전에 출력하던 부분

=> filteredData : 해당 값만 출력

 

추가한 부분

=> result : 해당하는 값을 담고있는 배열도 같이 출력

 

 

 

 

 

 

 

 

근데 문제점...

메인을 검색하면 filteredData처럼 2개가 나와야하는데, 얘는 딱 값이 똑같은 것만 뱉는다... 수ㅣ익...

 

 

❓ 이유 ❓

=> value === keyword 이기 때문에 딱 일치하는 값만 뱉는다!

=> keyword 값을 포함하는 식으로 바꿔주면 될듯

 

해결방법

=> includes() 사용

=> const result =  extractedValues[activeTab].filter(data => data.some(value => value.includes(keyword)));

 

 

 

 

 

 

 

=> 메인이 '포함' 된 값이 있는 배열을 뱉는다

 

 

 

 

 

 

=> 메인2가 '포함' 된 값이 있는 배열을 뱉는다

 

 

 

 

 

📚 최종 코드 📚

const handleSearch = () => {
    const keyword = searchInpRef.current.value.toLowerCase();

    if (!searchInpRef.current || keyword.trim() === "") return;

    setSearchTerm(keyword);
    const filteredData = extractedValues[activeTab].map(tab =>{
        const filteredTab = tab.filter(data =>
            JSON.stringify(data).toLowerCase().includes(keyword)
        );
        return filteredTab.length > 0 ? filteredTab : null; // 빈배열은 나오지 않게
    }).filter(tab => tab !== null); // null 값은 제외하고 필터링

    // 검색 결과가 있는 데이터 배열만 필터링
    const result =  extractedValues[activeTab].filter(data => data.some(value => value.includes(keyword)));

    console.log("---------------------")
    console.log(searchInpRef.current.value)
    console.log(filteredData)
    console.log(result)
    console.log("---------------------")
}

 

 

이제 이걸 화면에 뿌리기만 하면..!! 완성!

 

 

728x90
Comments