// for - 인덱스로 접근하여 반복for(let i =0; i < fruits.length; i++){
console.log(fruits[i]);}// 출력// 'apple'// 'banana'// 'coconut'// for ... of - 배열을 순회하여 반복for(const fruit of fruits){
console.log(fruit);}// 출력// 'apple'// 'banana'// 'coconut'
2. 배열과 메서드
2-1. 배열과 메서드
메서드
기능
역할
push / pop
배열의 끝 요소를 추가 또는 제거
요소 추가 / 제거
unshift / shift
배열의 앞 요소를 추가 또는 제거
요소 추가 / 제거
forEach
인자로 주어진 함수(콜백함수)를 배열 요소에 각각에 대해 실행
반복
map
배열 요소 전체를 대상으로 함수(콜백함수)를 호출하고, 함수 호출 결과를 배열로 반환
변형
includes
배열에 특정요소가 있는지 판별, 있으면 true, 없으면 false 반환 타입도 같아야 true 반환
요소확인
indexOf
배열에 특정요소가 있는지 판별, 있으면 그 요소의 첫 번째 인덱스를 반환, 없으면 -1을 반환
요소확인
findIndex
콜백함수를 통해 해당 요소를 찾고 그 요소의 첫 번째 인덱스를 반환, 없으면 -1을 반환
요소확인
find
콜백함수를 통해 순회하여 조건에 일치하는 요소를 찾고 그 요소를 반환, 없으면 undefined를 반환
// includes 예시const arr =[1,2,3,4];let number =3;
console.log(arr.includes(number));// 출력// true
- indexOf
배열에 특정요소가 있는지 확인하고 있으면 그 요소의 첫 번째 인덱스를 반환, 없으면 -1을 반환
// indexOf 예시const arr =[1,2,3,3];let number ="3";
console.log(arr.indexOf(number));// 출력// -1// 문자열 3은 없음let a =3;
console.log(arr.indexOf(a));// 출력// 2// 가장 앞에 있는 3의 인덱스 출력
// ex)let arr =["one","two","three"];let one = arr[0];let two = arr[1];let three = arr[2];// 반복 코드가 존재하며 비효율적// 1) 비구조화 할당으로 간단하게 표현let[one, two, three]= arr;// 배열 안에 변수들을 선언(인덱스를 기준으로 할당하기 때문에 순서가 중요함)// 피연산자로 매칭할 배열 지정// 2) 비구조화 할당 시, 매칭하는 요소 개수가 다른 경우let[one, two, three, four]=["one","two","three"];// four 변수에는 undefined가 할당됨// 3) 기본값 설정let[one, two, three, four ="four"]=["one","two","three"];// 기본값을 지정하면 undefined가 할당되지 않게 할 수 있음// 4) swap : 두 변수의 값 서로 바꾸기[a, b]=[b, a];
2-3. 배열 정리
배열의 본질은 객체
배열의 요소를 대괄호 접근법을 사용해 접근하는 건 객체 문법과 동일
다만 배열의 키는 인덱스(숫자)임
숫자형 키를 사용함으로써 배열은 객체 기본 기능 이외에도 순서가 있는 컬렉션을 제어하게 해주는 특별한 메서드 제공
3. 참고
3-1. 배열 순회 종합
방식
특징
비고
for loop
- 배열의 인덱스를 이용하여 각 요소에 접근 - break, continue 사용 가능
for … of
- 배열 요소에 바로 접근 가능 - break, continue 사용 가능
forEach
- 간결하고 가독성을 높임 - callback함수를 이용하여 각 요소를 조작하기 쉬움 - break, continue 사용 불가능
사용 권장
// 배열 순회 예시const chars =["a","b","c","d"];// for loopfor(let idx =0; idx < chars.length; idx++){
console.log(idx, chars[idx]);}// for ... offor(const char of chars){
console.log(char);}// forEach
chars.forEach((char, idx)=>{
console.log(idx, char);});
3-2. 콜백함수 구조를 사용하는 이유
함수의 재사용성 측면
함수를 호출하는 코드에서 콜백함수의 동작을 자유롭게 변경할 수 있음
예를 들어, map함수는 콜백 함수를 인자로 받아 배열의 각 요소를 순회하며 콜백함수를 실행
이때, 콜백함수는 각 요소를 변환하는 로직을 담당하므로, map함수를 호출하는 코드는 간결하고 가독성이 높아짐
비동기적 처리 측면
setTimeout 함수는 콜백함수를 인자로 받아 일정 시간이 지난 후, 실행됨
이때, setTimeout 함수는 비동기적으로 콜백함수를 실행하므로, 다른 코드의 실행을 방해하지 않음
// 비동적으로 콜백함수를 처리하는 setTimeout 함수 예시
console.log("a");setTimeout(()=>{
console.log("b");},3000);
console.log("c");// 출력// 'a'// 'c'// 'b'