[...객체] || Object.value(객체) 방식
둘다 객체나 배열의 요소를 추출하고 사용하는 방법 중 하나입니다.
그러나 두 방법은 사용하는 상황과 목적에 따라 약간의 차이가 있습니다.
1. [...객체] : 객체의 key와 value값 모두를 받아와서 배열이나, 객체에 저장
2. Object.value(객체) : 객체의 value값만 받아와서 배열이나, 객체에 저장
3.Object.entries(객체) : 객체의 key와 value값을 세트로 각각 받아와서 각 배열로 저장후, 다시 배열로 감싼다.
스프레드 연산자 (...)
스프레드 연산자는 배열이나 객체의 모든 요소를 개별 요소로 "펼쳐서" 사용할 수 있게 해줍니다. 이를 통해 배열이나 객체를 쉽게 복사하거나, 함수의 인자로 전달하거나, 배열을 합치는 등의 작업을 할 수 있습니다.
Object.values()
반면, Object.values() 함수는 객체의 모든 값을 배열로 반환합니다. 이는 주로 객체의 값에 접근하여 작업을 할 때 사용됩니다.
Object.entries()
배열 안에 배열
Object.entries()의 결과로 배열 안에 배열이 들어가는 이유는, 각 속성의 키와 값 쌍을 하나의 단위로 취급하여 그들을 나타내기 위함입니다. 이렇게 함으로써, 프로그래머는 객체의 속성을 쉽게 순회하고 각 속성의 키와 값을 동시에 처리할 수 있게 됩니다.
기존 코드
이해가 어렵고 오래 되서 아래에 다른 사람의 코드를 데려 왔다.(결과가 동일하다고 강사님이 인정해주심)
바뀐코드
요약
- 첫 번째 .map() 함수 후에는 tabType과 tabLabel 정보를 담은 객체 배열이 생성됩니다.
- 두 번째 .map() 함수는 이 객체 배열을 HTML 문자열 배열로 변환합니다.
- .join('')은 이 HTML 문자열들을 하나의 문자열로 합쳐서, 최종적으로 HTML로 삽입될 수 있는 전체 탭 목록을 생성합니다.
Object.entries 적용후,
첫번째 map함수 내용 적용후
객체 리터럴 표기법
return { tabType, tabLabel }; 부분에서 객체 리터럴 표기법을 사용합니다. 이 표기법에서는 { 변수명 }으로 객체를 생성할 때, 속성명과 변수명이 같다면, { 속성명: 변수값 }을 단순화하여 { 변수명 }으로 작성할 수 있습니다.
따라서, 위 코드에서 tabType 변수와 tabLabel 변수는 각각 [key, value] 쌍의 key와 value에 해당합니다. 그리고 이 변수들을 사용해 { tabType: tabType, tabLabel: tabLabel } 객체를 생성하는데, 이를 간소화하여 { tabType, tabLabel }로 작성한 것입니다.
결론
- Object.entries(TabLabel)로부터 얻은 각 [key, value] 쌍에 대해 .map() 함수 내에서 구조 분해 할당을 사용하여 tabType과 tabLabel 변수에 값을 할당합니다.
- 이 변수들을 사용하여 새로운 객체 { tabType, tabLabel }를 생성합니다. 여기서 객체의 속성명과 변수명이 같기 때문에, 간결한 표기법을 사용합니다.
- 최종적으로, .map() 함수는 이러한 객체들의 배열을 반환합니다. 각 객체는 원래 배열의 [key, value] 쌍을 { tabType: "KEYWORD", tabLabel: "추천 검색어" }와 같은 형태로 변환한 것입니다.
'🪁react > 바닐라 js 실습' 카테고리의 다른 글
바닐라 js에서 생성자의 역할 (0) | 2024.04.05 |
---|---|
자식 클래스 안에서 부모 클래스의 메소드 호출은 자식 클래스의 메소드 안에서 (2) | 2024.04.05 |
View와 Controller의 관계 (0) | 2024.04.05 |
바닐라 js로 하는 것의 규칙(계속 최신화 예정) (0) | 2024.04.05 |
클래스 컴포넌트 super란? (0) | 2024.04.03 |