: 배열의 모든 요소를 연결해 하나의 문자열로 만든다.
const fruits = ["apple", "banana", "orange"];
const result = fruits.join();
console.log(result); // 'apple, banana, orange'
}
: String 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나눈다.
주어진 문자열을 separator마다 끊은 부분 문자열을 담은 Array를 반환함
{
const fruits = "🍎, 🥝, 🍌, 🍒";
const result = fruits.split(",");
console.log(result); // ["🍎", " 🥝", " 🍌", " 🍒"]
}
: 배열의 순서를 반전한다. 첫 번째 요소는 마지막 요소가 되며 마지막 요소는 첫 번째 요소가 된다.
{
const array = [1, 2, 3, 4, 5];
const result = array.reverse();
// ❗ 배열자체와 리턴값 모두 변환시킨다.
console.log(result); // [5, 4, 3, 2, 1]
console.log(array); // [5, 4, 3, 2, 1]
}
arr.slice([begin[,end]])
: 어떤 배열의 begin부터 end까지(end 미포함)에 대한 복사본을 새로운 배열 객체로 반환한다. 원본 배열은 바뀌지 않는다.
매개변수
begin (Optional) : 0을 시작으로 하는 추출 시작점에 대한 인덱스를 의미
음수 인덱스 : 배열의 끝에서부터의 길이
e.g. slice(-2) 는 배열에서 마지막 두 개의 엘리먼트를 추출
undefined : 0번 인덱스부터 slice
배열의 길이보다 큰 경우 : 빈 배열을 반환
end (Optional) : 추출을 종료 할 0 기준 인덱스, slice 는 end 인덱스를 제외하고 추출
e.g. slice(1,4)는 두번째 요소부터 네번째 요소까지 (1, 2 및 3을 인덱스로 하는 요소) 추출
음수 인덱스 : 배열의 끝에서부터의 길이
e.g. slice(2,-1) 는 세번째부터 끝에서 두번째 요소까지 추출
= 생략 : slice()는 배열의 끝까지(arr.length) 추출
배열의 길이보다 큰 경우 : silce()는 배열의 끝까지(arr.length) 추출
반환 값
: 추출한 요소를 포함한 새로운 배열
{
const array = [1, 2, 3, 4, 5];
const result = array.slice(2, 5);
// index 2~4까지만 리턴
console.log(result); // [3,4,5]
console.log(array); // [1,2,3,4,5]
}
< 공용 예제 >
앞으로 나올 Find, Filter, Map,...에 해당하는 공통 예제이다.
class Student {
constructor(name, age, enrolled, score) {
this.name = name;
this.age = age;
<this.enrolled = enrolled;
this.score = score;
}
}
const students = [
new Student("A", 29, true, 45),
new Student("B", 28, false, 80),
new Student("C", 30, true, 90),
new Student("D", 40, false, 66),
new Student("E", 18, true, 88),
];
arr.find(callback[,thisArg])
: 주어진 판별 함수를 만족하는 "첫 번째 요소"의 값을 반환한다. 그런 요소가 없다면 undefined를 반환한다.
Q. 점수가 90인 학생을 찾아라.
{
const result = students.find((student) => student.score === 90);
console.log(result);
// Student {name: "C", age: 30, enrolled: true, score: 90}
}
arr.filter(callback(element[,index[,array]])[,thisArg])
: 주어진 함수의 테스트를 통과하는 모든 "요소"를 모아 새로운 배열로 반환한다.
매개변수
callback
: 각 요소를 시험할 함수. true를 반환하면 요소를 유지하고, false를 반환하면 버립니다. 다음 세 가지 매개변수를 받는다.
thisArg (Optional)
: callback을 실행할 때 this로 사용하는 값
반환 값
: 테스트를 통과한 요소로 이루어진 새로운 배열
Q. 등록된 학생들의 배열을 만들어라.
{
const result = students.filter((student) => student.enrolled);
console.log(result);
}
</* [console]
0: Student {name: "A", age: 29, enrolled: true, score: 45}
1: Student {name: "C", age: 30, enrolled: true, score: 90}
2: Student {name: "E", age: 18, enrolled: true, score: 88}
*/
arr.map(callback(currentValue[,index[,array]])[,thisArg])
: 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 "결과"를 모아 새로운 배열을 반환한다.
매개변수는 .filter와 같다( element=currentValue ).
Q. 오직 학생들의 점수만을 담은 배열을 만들어라.
result should be: [45, 80, 90, 66, 88]
{
const result = students.map((student) => student.score);
console.log(result);
}
8. Some & Every
-
some() : 배열 안의 어떤 요소라도 주어진 판별 함수를 통과하는지 테스트한다. 하나라도 조건에 만족하면 true 리턴
-
every() : 배열 안의 모든 요소가 주어진 판별 함수를 통과하는지 테스트한다.
매개변수는 .filter와 같다( element=currentValue ).
반환값은 true, false 중 하나
❗ 참고
빈 배열에서 호출하면,
.some()은 무조건 false를 반환
.every()은 무조건 true를 반환
Q. 점수가 50점 미만인 학생이 존재하는지 확인하라.
{
const result = students.some((student) => student.score < 50);
console.log(result); // true
}
9. Reduce
: 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환한다.
arr.reduce(callback[,initialValue])
매개변수
- callback : 배열의 각 요소에 대해 실행할 함수로, 다음 네 가지 인수를 받는다.
- accumulator : 누산기accmulator는 콜백의 반환값을 누적한다. 콜백의 이전 반환값이다.
콜백의 첫 번째 호출이면서 initialValue를 명시된 경우 initialValue의 값이다.
- currentValue : 처리할 현재 요소
- currentIndex, array → Optional
- initialValue (Optional) : callback의 최초 호출에서 첫 번째 인수에 제공하는 값.
초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용한다.
반환 값
: 누적 계산의 결과 값
콜백의 최초 호출 때 accumulator와 currentValue는 다음 두 가지 값 중 하나를 가질 수 있다.
- 만약 reduce() 함수 호출에서 initialValue를 제공한 경우, accumulator는 initialValue와 같고 currentValue는 배열의 첫 번째 값과 같다.
- initialValue를 제공하지 않았다면, accumulator는 배열의 첫 번째 값과 같고 currentValue는 두 번째와 같다.
Q. 학생들의 평균 점수를 계산하라.
{
const result = students.reduce((acc, cur) => acc + cur.score, 0); // 첫 콜백 호출시 acc=0, cur=45
console.log(result / students.length);
} // 73.8
.reduceRight()은 배열의 반대쪽부터 누적
10. Sort
arr.sort([compareFunction])
: 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환한다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따르며, 정렬 속도와 복잡도는 각 구현방식에 따라 다를 수 있다.
매개변수
- compareFunction (Optional) : 정렬 순서를 정의하는 함수. 생략하면 배열은 각 요소의 문자열 변환에 따라 각 문자의 유니코드 코드 포인트 값에 따라 정렬된다.
반환 값
: 정렬한 배열. 복사본이 만들어지는 것이 아니라 원 배열을 정렬한다.
설명
-
compareFunction이 제공되지 않으면,
요소를 문자열로 변환하고 유니 코드 코드 포인트 순서로 문자열을 비교하여 정렬됩니다.
e.g. 문자정렬: "바나나", "체리" , 숫자정렬: 80,9
-
compareFunction이 제공되면,
배열 요소는 compare 함수의 반환 값에 따라 정렬됩니다.
a와 b가 비교되는 두 요소라면,
- compareFunction(a, b) < 0: a, b
- compareFunction(a, b) = 0: a와 b의 순서 변경하지 않음
- compareFunction(a, b) > 0: b, a
const numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b)=> a - b);
console.log(numbers); // [1, 2, 3, 4, 5]
11. Chaining Array
Q. 학생들의 모든 점수를 포함한 문자열을 만들어라.
result should be: '45, 80, 90, 66, 88'
{
const result = students
.map((student) => student.score) // 학생들의 점수만 추출
.filter((score) => score >= 50) // 그 중 조건에 해당하는 것만 필터링
.join(); // 모든 요소 연결해 하나의 문자열로 만듬
console.log(result); // '45, 80, 90, 66, 88'
}
Q. 위 문제의 결과를 오름차순으로 정렬하라.
result should be: '45, 66, 80, 88, 90'
{
const result = students
.map((student) => student.score)
.sort((a, b) <=> a - b) // asc
// .sort(( a, b) => b - a) // desc
.join();
console.log(result);
}
❗ 참고 자료
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
https://www.youtube.com/channel/UC_4u-bXaba7yrRz_6x6kb_w