💡 유용한 배열 APIs, 배열 함수를 예제로 공부해보자
Q1. make a string out of an array
{
const fruits = ['apple', 'banana', 'orange'];
const result1 = fruits.join('/');
const result2 = fruits.join();
}
Q2. make an array out of a string
{
const fruits = '🍎, 🥝, 🍌, 🍒';
const result = fruits.split(',');
console.log(result);
}
fruit
는 string 이다.{
const fruits = '🍎, 🥝, 🍌, 🍒';
const result = fruits.split(',', 2); // limit:2
console.log(result);
}
Q3. make this array look like this: [5, 4, 3, 2, 1]
{
const array = [1, 2, 3, 4, 5];
const result = array.reverse();
console.log(result);
console.log(array);
// 함수를 호출한 arrary 배열 자체도 reverse 된다.
}
reverse
는 배열 자체를 변화시키고, 리턴값 또한 변화된 배열 자체를 return 한다.Q4. make new array without the first two elements
splice
사용 했을 때, [3, 4, 5]
가 나오는 배열을 원했지만 짤려나간 부분이 리턴되었다.{
const array = [1, 2, 3, 4, 5];
const result = array.splice(0, 2);
console.log(result);
console.log(array);
}
{
const array = [1, 2, 3, 4, 5];
const result = array.slice(2, 5);
console.log(result);
console.log(array);
}
slice
는 (시작인덱스, 끝인덱스) 이렇게 작성하는데 끝 인덱스를 제외하고! 이다. 만약 끝 인덱스에 4를 적었음 인덱스 4번은 제외하고 [3, 4]
만 출력된다.splice는 배열 자체를 수정하는 api, slice는 배열에서 원하는 부분만 리턴해서 받아오고 싶을 때 쓰면됨
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),
];
Q5. find a student with the score 90
{
const result = students.find((student) => student.score === 90);
console.log(result);
}
students
배열의 find
api사용하면 풀 수 있음Q6. make an array of enrolled students
{
const result = students.filter((student) => student.enrolled);
console.log(result);
}
Q7. make an array containing only the students' scores
result should be: [45, 80, 90, 66, 88]
{
const result = students.map((student) => student.score);
console.log(result);
}
map
은 배열 안에 들어있는 모든 요소들을 우리가 전달해 주는 콜백 함수를 호출하면서 콜백 함수에서 리턴되어진 값들로 대체하는 것이다.Q8. check if there is a student with the score lower than 50
{
const result = students.some((student) => student.score < 50);
console.log(result); // true
// every를 이용한 위에와 똑같은 문장
const result2 = !students.every((student) => student.score >= 50);
console.log(result2); // true
}
some
: 배열의 요소 중에서 이 콜백 함수가 리턴이 true가 되는 요소가 있는지 없는지를 확인해준다.every
: 배열에 들어있는 모든 요소들이 이 콜백함수의 조건을 충족해야지만 true가 리턴이 된다.some
을 사용하고, 모든 배열의 조건이 만족해야하면 every
를 사용하자Q9. compute students' average score
{
const result = students.reduce((prev, curr) => prev + curr.score, 0);
// 평균값은 학생수로 나눠줘야함
console.log(result / students.length); // 73.8
}
reduce
: 배열에 있는 모든 요소들의 값을 무언가 누적하는, 함께모아둘 때 사용하는 것 -> 우리가 원하는 시작 점부터 모든 배열을 돌면서 어떤 값을 누적할 때 쓰는 것reduceRight
: 순서가 거꾸로 도는 것prev
는 이전의 콜백함수에서 리턴된 값이 전달 되어서 오고, curr
은 배열의 아이템을 순차적으로 전달 받는다.Q10. make a string containing all the scores
result should be: '45, 80, 90, 66, 88'
{
const result = students
// 학생들의 배열을 점수로 변환
.map((student) => student.score)
// 50점 이상만
.filter((score) => score >= 50)
// join으로 string으로
.join();
console.log(result);
}
Q11. sorted in ascending order
result should be: '45, 66, 80, 88, 90'
{
const result = students
.map((student) => student.score)
// a - b는 - value라서 내림차순으로 정렬된다.
// b - a는 + 라서 오름차순으로 정렬된다.
.sort((a, b) => b - a)
.join();
console.log(result);
}