Map/Filter/Every

Park Bumsoo·2022년 3월 22일
0

Map / Filter / Every

Map

for문 과 비슷한기능을 가지며 배열에서 사용되는 반복문이다.

사용방법

	arr.map((arr_item)=>{
			// 모든 배열의 원소에게 반복실행할 코드	
		})

ex1) 일반적으로 배열만 변경할 경우

	cosnst classmates = ["철수", "영희", "훈이"]
    classmates.map((el) => (el + "어린이"))
    
    //["철수어린이", "영희어린이", "훈이어린이"]

ex2) 객체를 변경할 경우

	cosnst classmates = [
    	{name : "철수"}, {name : "영희"}, {name: "훈이"}
    ]
    classmates.map((el) => ({name : ed.name + "어린이"}))
    
    //{name : "철수어린이"}, {name : "영희어린이"}, {name: "훈이어린이"}

객체를 map으로 변경할 경우에는 () => ({})반환값객체가 되게끔 바꿔줘야한다.

	const classmates3 = [
    {name: "철수", age:13},
    {name: "영희", age:10},
    {name: "훈이", age:11}
]

	classmates3.map((el)=>({name: el.name, age: el.age, school: "토끼초등학교"}))
    
    //{name: "철수", age:13, school:"토끼초등학교"},
    //{name: "영희", age:10, school:"토끼초등학교"},
    //{name: "훈이", age:11, school:"토끼초등학교"}

위 코드처럼 직접 객체(위에선school)를 추가하는것도 가능하다.
또한 변경되는 부분은 화살표함수이기 때문에 ()가 생략이 가능하다.

    classmates.map( (el) => (el + "어린이") )
    >>>>
    classmates.map( (el) => el + "어린이" )

객체의 경우에는 생략이 불가능하다.

	const add = (aaa, bbb) => {
    	return aaa + bbb
	}

    add(1, 2)
    3
    const add2 = (aaa, bbb) => (aaa + bbb)

    const add3 = (aaa, bbb) => aaa + bbb

    const classmates= [
        { name: "철수" },
        { name: "영희" },
        { name: "훈이" }
    ]

    classmates.map((el) => { name: el.name + "어린이" })
    (3) [undefined, undefined, undefined]

Filter

filter은 조건에 충족하면 유지, 충족하지않으면 삭제하는 메서드이다.

	const classmates= [
        {name: "철수", age:13},
    	{name: "영희", age:10},
    	{name: "훈이", age:11}
    ] 
    
    classmates
    - filter((el)=>(el.age >= 11)) //age가 11이면 제외시킨다.
    - map((el)=>({name: el.name, age: el.age, school:"다람쥐초등학교"}))
    
    //{name: "철수", age:13, school:"다람쥐초등학교"},
    //{name: "영희", age:10, school:"다람쥐초등학교"},
    
    

refetchQueries

refetchQueries: [][]안의 값을 새로 가져와달라는 의미

실적용

import { useRouter } from 'next/router'
import { useQuery,gql, useMutation } from '@apollo/client'
import styled from '@emotion/styled'
//게시글 상세
const FETCH_BOARDS = gql`
   query fetchBoards{
       fetchBoards{
           number
           writer
           title
           contents
       }
   }
`
const DELETE_BOARD = gql`
   mutation deleteBoard($number: Int){
       deleteBoard(number: $number){
           message
       }
   }
`

const Row = styled.div`
   display: flex;
   flex-direction: row;
`

const Column = styled.div`
   width: 20%;
`

export default function StaticRoutedPage(){
   const router = useRouter()
   const [deleteBoard] = useMutation(DELETE_BOARD)
   const { data } = useQuery(FETCH_BOARDS)

   const onClickDelete = (event) =>{
       deleteBoard({
           variables: {number: Number(event.target.id)},
           refetchQueries: [{query: FETCH_BOARDS}]  // {query: FETCH_BOARDS}를 새로 가져와라
       })
   }
   
   console.log(data)
   return(
       <div>
       	   //map을 사용하여 아래문장을 작성하기에  =>()에 들어갈 값은 element의 각종 값이다.
           {data?.fetchBoards.map((el, index)=>(
               <Row key={el.number}> 
                   <Column><input type="checkbox"></input></Column>
                   <Column>{el.number}</Column>
                   <Column>{el.writer}</Column>
                   <Column>{el.title}</Column>
                   <Column>
                       <button id={el.number} onClick={onClickDelete}>삭제</button>
                   </Column>
               </Row>))
           }
       </div>
   )
   //고유한 값을가진 키가 필요하다.
}

단 key는 index로 사용할 수 없다.

Every

every는 배열조작 메서드 중 하나로 배열안의 모든 데이터가 조건을 만족하면 true
아니면 else,false를 반환하게된다.

비슷한 메서드로는 배열 안쪽 데이터 중 하나라도 만족하는 경우 true를 반환해주는 some이 있으며 fiter와는 다르게 boolean으로 값을 축력하는 특징이있다.

profile
프론트엔드 주니어 개발자(React, Next.js)

0개의 댓글