티스토리 뷰
Frontend/JavaScript
[JavaScript] Array.from + selectedOptions 으로 선택된 요소의 값만 담은 배열반환하기
blueprint-12 2023. 5. 11. 20:30Array.from()
해당 메서드는 유사 배열 객체(array-like object)나 반복가능한 객체(iterable object)를 얕게 복사해 새로운 Array 객체를 만든다.
- 첫번째 매개변수로는 `배열로 변환하고자 하는 유사 배열 객체나 반복 가능한 객체`를 넘기고 두번째 매개변수(optional)로 배열의 모든 요소에 대해 호출할 매핑 함수를 전달한다. 세번째 매개변수(optional)는 thisArg로 매핑 함수를 실행할 때 this로 사용할 값을 넘겨주면 된다.
- 시퀀스 생성기(range)로도 사용할 수 있다.
유사 배열 객체(array-like object) : length 속성과 인덱싱된 요소를 가진 객체
순회 가능한 객체(iterable object): Map, Set 등 객체의 요소를 얻을 수 있는 객체
사용 예제
console.log(Array.from('foo'));
// Expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// Expected output: Array [2, 4, 6]
// Array.from 과 화살표 함수 사용하기
// Using an arrow function as the map function to
// manipulate the elements
Array.from([1, 2, 3], x => x + x);
// [2, 4, 6]
// Generate a sequence of numbers
// Since the array is initialized with `undefined` on each position,
// the value of `v` below will be `undefined` 대충 초기화되기 전에 v(value)는 undefined라는 말,
// 그래서 i(index)를 반환하여 length만큼의 요소를 갖는 배열을 반환하게 만든다.
Array.from({length: 5}, (v, i) => i);
// [0, 1, 2, 3, 4]
HTMLSelectElement.selectedOptions
`HTMLSelectElement`의 읽기 전용 프로퍼티이다. <select>태그에서 선택된 <options>태그의 요소들을 포함하고 있는 리스트를 포함하고 있다.
문법
var selectedCollection = HTMLSelectElement.selectedOptions;
값은 <선택> 요소 내에서 HTMLSelectElement의 하위 요소이거나 HTMLOptGroupElement(en-US)의 하위 요소인 현재 선택된 모든 HTMLOptionElement를 나열하는 HTMLCollection이다.
즉, <선택> 요소에 포함된 모든 옵션이 결과의 일부가 될 수 있지만 옵션 그룹은 목록에 포함되지 않는다.(즉, 선택된 옵션들만 포함되는 값을 반환한다.)
현재 선택된 옵션이 없는 경우 컬렉션은 비어 있으며 길이(en-US)는 0을 반환한다.
예시 코드
const onRolesChanged = (e) => {
//1개 이상의 옵션이 선택될 때를 허용하기 위함
const values = Array.from(
e.target.selectedOptions, // HTMLCollection
(option) => option.value
);
setRoles(values);
};
본문은 이 코드의 option 이 무엇을 가리키는 지 명확하게 이해가 안가 찾아보게 된 내용이다.
- 해당 코드에서 `option`인자는 HTML `select`요소의 selectedOptions` 속성에서 반환되는 `HTMLOptionsCollection`의 속성에서 반환되는 `HTMLOptionsCollections`의 요소라고 한다.
- HTMLOptionsCollection은 select요소에서 선택된 옵션 요소들의 컬렉션을 나타내며, 각각의 요소는 HTMLOptionElement 객체이다. 이 객체는 해당 옵션 요소에 대한 정보를 가지고 있으며, value 속성은 해당 옵션의 값을 나타낸다.
- Array.from() 메서드를 통해 HTMLOptionsCollection을 배열로 변환후, 매핑 함수를 통해 각 옵션 요소의 value속성만을 가지고 있는 새로운 배열을 만들어 준 것이다.
HTML codes
select 태그의 multiple 속성은 1개 이상의 option을 선택할 수 있게 해준다.
<select
id="roles"
name="roles"
className={`form__select ${validRolesClass}`}
multiple={true}
size="3"
value={roles}
onChange={onRolesChanged}>
{options}
</select>
- 위의 코드는 정확히는 JSX로 HTML에서 JS를 쓸 수 있다. 하단은 options 변수의 코드이다.
// Object.values(): 전달된 파라미터 객체가 가지는 (열거 가능한) 속성의 값들로 이루어진 배열을 리턴한다. for...in 구문과 동일한 순서를 가진다.
const options = Object.values(ROLES).map((role) => {
return (
<option key={role} value={role}>
{role}
</option>
);
});
// ROLES.js
export const ROLES = {
Employee: "Employee",
Manager: "Manager",
Admin: "Admin",
};
all ref: MDN
'Frontend > JavaScript' 카테고리의 다른 글
[JavaScript | ES6 ] get(접근자), set(설정자), 프로퍼티 플래그와 설명자 (0) | 2023.07.24 |
---|---|
[JavaScript | ES6] Class (this, public & private 필드, 상속) (0) | 2023.07.18 |
[JavaScript] 이중부정 연산자(!!) (0) | 2023.04.17 |
[node.js] process.env 환경변수 설정과 dotenv 라이브러리 (0) | 2023.04.13 |
[JavaScript] 버블링이 발생하는 이벤트와 아닌 이벤트, event.target과 currentTarget 차이점 (0) | 2023.04.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- text input pattern
- 항해99추천비추천
- nvm경로 오류
- 원티드 프리온보딩 FE 챌린지
- 항해99프론트후기
- grid flex
- 원티드 FE 프리온보딩 챌린지
- 타입스크립트 DT
- aspect-ratio
- getServerSideProps
- fs모듈 넥스트
- 프리온보딩 프론트엔드 챌린지 3월
- 원티드 프리온보딩 프론트엔드 챌린지 3일차
- 틸드와 캐럿
- nvm 설치순서
- 형제 요소 선택자
- tilde caret
- && 셸 명령어
- ~ ^
- 부트캠프항해
- Prittier
- float 레이아웃
- reactAPI
- 타입스크립트 장점
- is()
- 항해99프론트
- 원티드 3월 프론트엔드 챌린지
- 프리렌더링확인법
- getStaticPaths
- D 플래그
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함