자바스크립트 배열(Array)은 여러 개의 값을 하나의 변수에 저장할 수 있는 객체입니다. 배열은 숫자 인덱스를 사용하여 요소에 접근하며, 다양한 메서드를 제공하여 데이터를 효율적으로 관리할 수 있습니다.
배열 39가지의 인스턴스 메서드 사용법
1. push()와 pop(): 배열의 끝에서 요소 추가/제거
push()는 배열의 끝에 새로운 요소를 추가하고, pop()은 마지막 요소를 제거합니다.
예를 들어, 친구 리스트에 새 친구를 추가하거나 마지막 친구를 제거할 때 사용할 수 있어요.
let friends = ['철수', '영희'];
friends.push('민수'); // '민수'를 배열 끝에 추가
console.log(friends); // ['철수', '영희', '민수']
let lastFriend = friends.pop(); // 마지막 요소 '민수' 제거
console.log(lastFriend); // '민수'
console.log(friends); // ['철수', '영희']
2. shift()와 unshift(): 배열의 앞에서 요소 추가/제거
shift()는 배열의 첫 번째 요소를 제거하고, unshift()는 배열의 앞에 새로운 요소를 추가합니다.
예를 들어, 줄서기에서 가장 앞 사람이 나가거나 새 사람이 앞에 설 때 사용할 수 있어요.
let queue = ['철수', '영희'];
queue.unshift('민수'); // '민수'를 배열 앞에 추가
console.log(queue); // ['민수', '철수', '영희']
let firstPerson = queue.shift(); // 첫 번째 요소 '민수' 제거
console.log(firstPerson); // '민수'
console.log(queue); // ['철수', '영희']
3. slice(): 배열의 일부분 잘라내기
slice()는 배열의 특정 부분을 잘라서 새로운 배열로 반환합니다.
예를 들어, 과일 리스트에서 일부만 가져오고 싶을 때 사용할 수 있어요.
let fruits = ['사과', '바나나', '오렌지', '포도'];
let someFruits = fruits.slice(1, 3); // 인덱스 1부터 3 전까지 잘라냄
console.log(someFruits); // ['바나나', '오렌지']
4. splice(): 배열의 요소 추가, 제거, 교체
splice()는 배열의 특정 위치에서 요소를 추가, 제거, 교체할 수 있습니다.
예를 들어, 친구 리스트에서 특정 친구를 제거하거나 새 친구를 추가할 때 사용할 수 있어요.
let friends = ['철수', '영희', '민수'];
friends.splice(1, 1, '지민'); // 인덱스 1에서 1개 제거하고 '지민' 추가
console.log(friends); // ['철수', '지민', '민수']
5. map(): 배열의 모든 요소를 변환
map()은 배열의 각 요소에 함수를 적용하여 새로운 배열을 만듭니다.
예를 들어, 숫자 배열의 모든 요소를 2배로 만들고 싶을 때 사용할 수 있어요.
let numbers = [1, 2, 3];
let doubled = numbers.map(num => num * 2); // 각 요소를 2배로 변환
console.log(doubled); // [2, 4, 6]
6. filter(): 조건에 맞는 요소만 필터링
filter()는 조건을 만족하는 요소만 새로운 배열로 반환합니다.
예를 들어, 점수 리스트에서 합격한 점수만 추출하고 싶을 때 사용할 수 있어요.
let scores = [80, 45, 90, 60];
let passed = scores.filter(score => score >= 60); // 60점 이상만 필터링
console.log(passed); // [80, 90, 60]
7. reduce(): 배열의 요소를 하나로 줄이기
reduce()는 배열의 모든 요소를 누적하여 하나의 값으로 줄입니다.
예를 들어, 숫자 배열의 총합을 계산하고 싶을 때 사용할 수 있어요.
let numbers = [1, 2, 3, 4];
let sum = numbers.reduce((acc, num) => acc + num, 0); // 모든 요소의 합 계산
console.log(sum); // 10
8. forEach(): 배열의 각 요소에 함수 실행
forEach()는 배열의 각 요소에 대해 함수를 실행합니다.
예를 들어, 각 학생들의 점수를 출력할 때 사용할 수 있어요.
// 학생들의 점수를 배열로 저장
let scores = [85, 90, 78, 92, 88];
// 각 점수를 출력하는 forEach 문
scores.forEach((score, index) => {
console.log(`학생 ${index + 1}의 점수: ${score}`);
});
// 출력 결과:
// 학생 1의 점수: 85
// 학생 2의 점수: 90
// 학생 3의 점수: 78
// 학생 4의 점수: 92
// 학생 5의 점수: 88
9. find()와 findIndex(): 조건에 맞는 요소 찾기
find()는 조건을 만족하는 첫 번째 요소를 반환하고, findIndex()는 그 요소의 인덱스를 반환합니다.
예를 들어, 친구 리스트에서 특정 친구를 찾을 때 사용할 수 있어요.
let friends = ['철수', '영희', '민수'];
let found = friends.find(friend => friend === '영희'); // '영희' 찾기
console.log(found); // '영희'
let index = friends.findIndex(friend => friend === '영희'); // '영희'의 인덱스 찾기
console.log(index); // 1
10. includes(): 배열에 특정 요소가 있는지 확인
includes()는 배열이 특정 요소를 포함하는지 확인합니다.
예를 들어, 친구 리스트에 특정 친구가 있는지 확인할 때 사용할 수 있어요.
let friends = ['철수', '영희', '민수'];
let hasFriend = friends.includes('영희'); // '영희'가 있는지 확인
console.log(hasFriend); // true
11. join(): 배열의 요소를 문자열로 합치기
join()은 배열의 모든 요소를 하나의 문자열로 합칩니다.
예를 들어, 친구 리스트를 쉼표로 구분된 문자열로 만들고 싶을 때 사용할 수 있어요.
let friends = ['철수', '영희', '민수'];
let friendString = friends.join(', '); // 요소를 쉼표로 구분하여 문자열로 합침
console.log(friendString); // "철수, 영희, 민수"
12. reverse(): 배열의 순서를 뒤집기
reverse()는 배열의 요소 순서를 뒤집습니다.
예를 들어, 숫자 배열을 역순으로 정렬하고 싶을 때 사용할 수 있어요.
let numbers = [1, 2, 3, 4];
numbers.reverse(); // 배열의 순서를 뒤집음
console.log(numbers); // [4, 3, 2, 1]
13. sort(): 배열의 요소를 정렬하기
sort()는 배열의 요소를 정렬합니다. 기본적으로는 문자열 순서로 정렬되지만, 숫자 정렬을 위해 비교 함수를 사용할 수도 있어요.
let numbers = [3, 1, 4, 1, 5];
numbers.sort(); // 기본 정렬 (문자열 순서)
console.log(numbers); // [1, 1, 3, 4, 5]
numbers.sort((a, b) => a - b); // 숫자 오름차순 정렬
console.log(numbers); // [1, 1, 3, 4, 5]
14. every()와 some(): 조건 검사
every()는 배열의 모든 요소가 조건을 만족하는지 확인하고, some()은 일부 요소가 조건을 만족하는지 확인합니다.
예를 들어, 모든 점수가 합격점인지, 또는 일부 점수가 합격점인지 확인할 때 사용할 수 있어요.
let scores = [80, 90, 70, 85];
let allPassed = scores.every(score => score >= 60); // 모든 점수가 60점 이상인지 확인
console.log(allPassed); // true
let somePassed = scores.some(score => score >= 90); // 일부 점수가 90점 이상인지 확인
console.log(somePassed); // true
15. flat(): 다차원 배열을 평탄화하기
flat()은 다차원 배열을 평탄화하여 1차원 배열로 만듭니다.
예를 들어, 중첩된 배열을 단일 배열로 만들고 싶을 때 사용할 수 있어요.
let nestedArray = [1, [2, [3, 4]]];
let flatArray = nestedArray.flat(2); // 2단계까지 평탄화
console.log(flatArray); // [1, 2, 3, 4]
16. flatMap(): 매핑 후 평탄화
flatMap()은 각 요소에 함수를 적용한 후 결과를 평탄화합니다.
예를 들어, 각 요소를 2배로 만들고 평탄화하고 싶을 때 사용할 수 있어요.
let numbers = [1, 2, 3];
let result = numbers.flatMap(num => [num, num * 2]); // 각 요소를 2배로 만들고 평탄화
console.log(result); // [1, 2, 2, 4, 3, 6]
17. at(): 특정 인덱스의 요소 가져오기
at()은 배열의 특정 인덱스에 있는 요소를 반환합니다. 음수 인덱스도 지원하므로, 마지막 요소를 쉽게 가져올 수 있어요.
let fruits = ['사과', '바나나', '오렌지'];
let lastFruit = fruits.at(-1); // 마지막 요소 가져오기
console.log(lastFruit); // '오렌지'
18. toReversed(), toSorted(), toSpliced(): 원본 배열 변경 없이 작업
이 메서드들은 원본 배열을 변경하지 않고 새로운 배열을 반환합니다.
예를 들어, 배열을 정렬하거나 역순으로 만들 때 원본 배열을 유지하고 싶을 때 사용할 수 있어요.
let numbers = [3, 1, 2];
let sorted = numbers.toSorted(); // 정렬된 새 배열
console.log(sorted); // [1, 2, 3]
console.log(numbers); // [3, 1, 2] (원본 배열은 그대로)
19. with(): 특정 인덱스의 요소 교체
with()는 원본 배열을 변경하지 않고 특정 인덱스의 요소를 교체한 새 배열을 반환합니다.
예를 들어, 배열의 특정 요소를 바꾸고 싶을 때 사용할 수 있어요.
let fruits = ['사과', '바나나', '오렌지'];
let newFruits = fruits.with(1, '포도'); // 인덱스 1의 요소를 '포도'로 교체
console.log(newFruits); // ['사과', '포도', '오렌지']
console.log(fruits); // ['사과', '바나나', '오렌지'] (원본 배열은 그대로)
20. entries(), keys(), values(): 배열의 이터레이터 생성
이 메서드들은 배열의 인덱스와 값을 반환하는 이터레이터를 생성합니다.
예를 들어, 배열의 인덱스와 값을 함께 사용하고 싶을 때 활용할 수 있어요.
let fruits = ['사과', '바나나', '오렌지'];
let entries = fruits.entries(); // 인덱스와 값을 쌍으로 반환
for (let [index, value] of entries) {
console.log(index, value); // 0 '사과', 1 '바나나', 2 '오렌지'
}
let keys = fruits.keys(); // 인덱스만 반환
for (let key of keys) {
console.log(key); // 0, 1, 2
}
let values = fruits.values(); // 값만 반환
for (let value of values) {
console.log(value); // '사과', '바나나', '오렌지'
}
21. fill(): 배열의 특정 범위를 값으로 채우기
fill()은 배열의 특정 범위를 지정한 값으로 채웁니다.
예를 들어, 배열을 특정 값으로 초기화하고 싶을 때 사용할 수 있어요.
let numbers = [1, 2, 3, 4, 5];
numbers.fill(0, 1, 3); // 인덱스 1부터 3 전까지 0으로 채움
console.log(numbers); // [1, 0, 0, 4, 5]
22. copyWithin(): 배열 내부의 요소 복사
copyWithin()은 배열 내부의 요소를 복사하여 다른 위치에 붙여넣습니다.
예를 들어, 배열의 일부를 복사하여 다른 위치에 사용하고 싶을 때 활용할 수 있어요.
let numbers = [1, 2, 3, 4, 5];
numbers.copyWithin(0, 3); // 인덱스 3부터의 요소를 인덱스 0에 복사
console.log(numbers); // [4, 5, 3, 4, 5]
23. reduceRight(): 오른쪽부터 누적 계산
reduceRight()는 배열의 오른쪽부터 시작하여 누적 계산을 수행합니다.
예를 들어, 배열의 요소를 오른쪽부터 더하고 싶을 때 사용할 수 있어요.
let numbers = [1, 2, 3, 4];
let sum = numbers.reduceRight((acc, num) => acc + num, 0); // 오른쪽부터 누적 합계
console.log(sum); // 10 (4 + 3 + 2 + 1)
24. findLast()와 findLastIndex(): 조건에 맞는 마지막 요소 찾기
findLast()는 조건을 만족하는 마지막 요소를 반환하고, findLastIndex()는 그 요소의 인덱스를 반환합니다.
예를 들어, 배열에서 마지막으로 조건을 만족하는 요소를 찾고 싶을 때 사용할 수 있어요.
let numbers = [1, 2, 3, 4, 3];
let lastFound = numbers.findLast(num => num === 3); // 마지막으로 3인 요소 찾기
console.log(lastFound); // 3
let lastIndex = numbers.findLastIndex(num => num === 3); // 마지막으로 3인 요소의 인덱스 찾기
console.log(lastIndex); // 4
25. toLocaleString(): 지역화된 문자열로 변환
toLocaleString()은 배열의 요소를 지역화된 문자열로 변환합니다.
예를 들어, 숫자를 지역화된 형식으로 표시하고 싶을 때 사용할 수 있어요.
let numbers = [1000, 2000, 3000];
let localeString = numbers.toLocaleString(); // 지역화된 문자열로 변환
console.log(localeString); // "1,000, 2,000, 3,000" (지역에 따라 다를 수 있음)
26. toString(): 배열을 문자열로 변환
toString()은 배열의 모든 요소를 쉼표로 구분된 문자열로 변환합니다.
예를 들어, 배열을 간단한 문자열로 표현하고 싶을 때 사용할 수 있어요.
let fruits = ['사과', '바나나', '오렌지'];
let string = fruits.toString(); // 배열을 문자열로 변환
console.log(string); // "사과,바나나,오렌지"
27. Array.isArray(): 배열인지 확인
Array.isArray()는 값이 배열인지 확인합니다.
예를 들어, 변수가 배열인지 확인하고 싶을 때 사용할 수 있어요.
let arr = [1, 2, 3];
let isArray = Array.isArray(arr); // 배열인지 확인
console.log(isArray); // true
28. Array.from(): 유사 배열을 배열로 변환
Array.from()은 유사 배열 객체나 이터러블을 배열로 변환합니다.
예를 들어, 문자열을 배열로 변환하고 싶을 때 사용할 수 있어요.
let str = 'hello';
let arr = Array.from(str); // 문자열을 배열로 변환
console.log(arr); // ['h', 'e', 'l', 'l', 'o']
29. Array.of(): 주어진 인수로 배열 생성
Array.of()는 주어진 인수로 새로운 배열을 생성합니다.
예를 들어, 단일 숫자로 배열을 만들고 싶을 때 사용할 수 있어요.
let arr = Array.of(7); // 단일 요소 7을 가진 배열 생성
console.log(arr); // [7]
30. Array.prototype@@iterator: 이터레이터 반환
이 메서드는 배열의 이터레이터를 반환합니다.
배열의 @@iterator 메서드는 [Symbol.iterator]를 통해 접근할 수 있으며, 이는 이터레이터 객체를 반환합니다.
let arr = [10, 20, 30];
let iterator = arr[Symbol.iterator](); // 배열 이터레이터 생성
console.log(iterator.next()); // { value: 10, done: false }
console.log(iterator.next()); // { value: 20, done: false }
console.log(iterator.next()); // { value: 30, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
동작설명
1. arr[Symbol.iterator]()를 호출하면 배열의 이터레이터 객체가 반환됩니다.
2. iterator.next()를 호출할 때마다 배열의 다음 요소를 반환합니다.
3. 반환된 객체는 { value: 요소값, done: 불리언값 } 형태입니다.
- value: 현재 요소의 값
- done: 요소를 모두 순회하면 true, 아직 남아있으면 false
4. 배열을 끝까지 순회하면 value는 undefined, done은 true가 됩니다.
for...of 문과 @@iterator
배열은 기본적으로 for...of 문을 사용할 수 있으며, 이는 내부적으로 @@iterator를 활용합니다.
let arr = [10, 20, 30];
for (let value of arr) {
console.log(value);
}
// 출력:
// 10
// 20
// 30
Array.prototype[@@iterator]의 활용
이터레이터는 수동으로 next()를 호출하여 순회할 수도 있지만, for...of 문이나 스프레드 연산자(...)와 같은 기능과 함께 사용할 수도 있습니다.
let arr = [1, 2, 3];
let iter = arr[Symbol.iterator]();
console.log([...iter]); // [1, 2, 3]
이터레이터 객체는 한 번 사용되면 재사용할 수 없으므로, 다시 순회하려면 새로운 이터레이터를 생성해야 합니다.
let arr = [5, 10, 15];
let iter = arr[Symbol.iterator]();
console.log(iter.next()); // { value: 5, done: false }
console.log(iter.next()); // { value: 10, done: false }
console.log([...iter]); // [15]
위 코드에서 iter.next()를 두 번 호출한 후 남은 값만 [...iter]에 의해 배열로 변환됩니다.
31. Array.prototype@@unscopables: 스코프에서 제외할 속성
Array.prototype[@@unscopables]는 with 문에서 특정 배열 메서드를 스코프에서 제외할 수 있도록 도와주는 객체입니다. 즉, with 문을 사용할 때 특정 메서드가 프로퍼티 탐색에서 제외되도록 설정할 수 있습니다.
Array.prototype[@@unscopables] 사용법
배열의 @@unscopables 속성은 Symbol.unscopables을 통해 접근할 수 있으며, 특정 메서드를 true로 설정하면 with 문에서 해당 메서드를 찾지 못하게 됩니다.
let arr = [1, 2, 3];
console.log(arr[Symbol.unscopables]);
/* 출력 예시 (브라우저에 따라 다를 수 있음):
{
copyWithin: true,
entries: true,
fill: true,
find: true,
findIndex: true,
keys: true,
values: true
}
*/
with 문과 @@unscopables
let arr = [1, 2, 3];
with (arr) {
console.log(find); // ReferenceError: find is not defined
}
@@unscopables 속성 변경
사용자가 직접 @@unscopables 값을 수정하여 특정 메서드를 스코프에서 제외할 수도 있습니다.
let arr = [1, 2, 3];
arr[Symbol.unscopables].push = true;
with (arr) {
console.log(push); // ReferenceError: push is not defined
}
동작 설명
- arr[Symbol.unscopables]은 배열의 특정 메서드를 with 문에서 제외하는 객체입니다.
- 기본적으로 find, findIndex, fill 등의 메서드가 제외되어 있습니다.
- push 메서드를 true로 설정하면 with (arr) 블록 내에서 push를 찾을 수 없게 됩니다.
Array.prototype[@@unscopables]은 with 문을 사용할 때 특정 메서드를 제외할 수 있도록 도와줍니다. 이는 with 문이 스코프 체인 탐색을 수행할 때 불필요한 메서드를 제거하여 혼동을 줄이는 데 유용할 수 있습니다. 그러나 with 문 자체가 일반적으로 권장되지 않으므로, @@unscopables를 직접 사용할 일은 거의 없지만, 동작 원리를 이해하는 것은 중요합니다.
32. Array.prototype.group(): 그룹화
group()은 배열의 요소를 그룹화하여 객체로 반환합니다.
예를 들어, 점수를 등급별로 그룹화하고 싶을 때 사용할 수 있어요.
let scores = [80, 95, 70, 85];
let grouped = scores.group(score => {
return score >= 90 ? 'A' : score >= 80 ? 'B' : 'C';
});
console.log(grouped); // { B: [80, 85], A: [95], C: [70] }
33. Array.prototype.groupToMap(): 그룹화하여 Map으로 반환
groupToMap()은 배열의 요소를 그룹화하여 Map 객체로 반환합니다.
예를 들어, 점수를 등급별로 그룹화하고 Map으로 관리하고 싶을 때 사용할 수 있어요.
let scores = [80, 95, 70, 85];
let groupedMap = scores.groupToMap(score => {
return score >= 90 ? 'A' : score >= 80 ? 'B' : 'C';
});
console.log(groupedMap); // Map { 'B' => [80, 85], 'A' => [95], 'C' => [70] }
34. Array.prototype.flatMap(): 매핑 후 평탄화
flatMap()은 각 요소에 함수를 적용한 후 결과를 평탄화합니다.
예를 들어, 각 요소를 2배로 만들고 평탄화하고 싶을 때 사용할 수 있어요.
let numbers = [1, 2, 3];
let result = numbers.flatMap(num => [num, num * 2]); // 각 요소를 2배로 만들고 평탄화
console.log(result); // [1, 2, 2, 4, 3, 6]
35. Array.prototype.at(): 특정 인덱스의 요소 가져오기
at()은 배열의 특정 인덱스에 있는 요소를 반환합니다. 음수 인덱스도 지원하므로, 마지막 요소를 쉽게 가져올 수 있어요.
let fruits = ['사과', '바나나', '오렌지'];
let lastFruit = fruits.at(-1); // 마지막 요소 가져오기
console.log(lastFruit); // '오렌지'
36. Array.prototype.toReversed(): 원본 배열 변경 없이 역순 배열 반환
toReversed()는 원본 배열을 변경하지 않고 역순 배열을 반환합니다.
예를 들어, 배열을 역순으로 만들고 싶지만 원본 배열은 유지하고 싶을 때 사용할 수 있어요.
let numbers = [1, 2, 3];
let reversed = numbers.toReversed(); // 역순 배열 생성
console.log(reversed); // [3, 2, 1]
console.log(numbers); // [1, 2, 3] (원본 배열은 그대로)
37. Array.prototype.toSorted(): 원본 배열 변경 없이 정렬된 배열 반환
toSorted()는 원본 배열을 변경하지 않고 정렬된 배열을 반환합니다.
예를 들어, 배열을 정렬하고 싶지만 원본 배열은 유지하고 싶을 때 사용할 수 있어요.
let numbers = [3, 1, 2];
let sorted = numbers.toSorted(); // 정렬된 배열 생성
console.log(sorted); // [1, 2, 3]
console.log(numbers); // [3, 1, 2] (원본 배열은 그대로)
38. Array.prototype.toSpliced(): 원본 배열 변경 없이 요소 추가/제거
toSpliced()는 원본 배열을 변경하지 않고 요소를 추가, 제거, 교체한 배열을 반환합니다.
예를 들어, 배열의 특정 요소를 제거하거나 추가하고 싶지만 원본 배열은 유지하고 싶을 때 사용할 수 있어요.
let fruits = ['사과', '바나나', '오렌지'];
let spliced = fruits.toSpliced(1, 1, '포도'); // 인덱스 1에서 1개 제거하고 '포도' 추가
console.log(spliced); // ['사과', '포도', '오렌지']
console.log(fruits); // ['사과', '바나나', '오렌지'] (원본 배열은 그대로)
39. Array.prototype.with(): 원본 배열 변경 없이 특정 인덱스의 요소 교체
with()는 원본 배열을 변경하지 않고 특정 인덱스의 요소를 교체한 새 배열을 반환합니다.
예를 들어, 배열의 특정 요소를 바꾸고 싶지만 원본 배열은 유지하고 싶을 때 사용할 수 있어요.
let fruits = ['사과', '바나나', '오렌지'];
let newFruits = fruits.with(1, '포도'); // 인덱스 1의 요소를 '포도'로 교체
console.log(newFruits); // ['사과', '포도', '오렌지']
console.log(fruits); // ['사과', '바나나', '오렌지'] (원본 배열은 그대로)
'web 언어 > HTML5 & CSS & Javascript' 카테고리의 다른 글
CSS - 단위 : 길이와 폰트 크기를 이해하자 (in, cm, mm, pt, pc, em, ex, px) (0) | 2025.03.20 |
---|---|
HTML - display(인라인, 인라인블록, 블록) 개념 이해하기 (0) | 2025.03.20 |
HTML - Box 모델 (블록박스, 인라인박스) 웹디자인 기본 개념 (0) | 2025.03.20 |
CSS - 스타일이 잘 안 먹힐 때 구체성 때문이다 (0) | 2025.03.19 |
CSS - 속성 선택자(Selector) 7가지 사용방법 (0) | 2025.03.19 |