진스
8. Array(2) (퀴즈문제) 본문
728x90
퀴즈 타임
Q1. 배열에서 문자열 만들기
Array.prototype.join()
const fruits1 = ['apple', 'banana', 'orange'];
{
// My
let result = ``;
fruits1.forEach((item, index) => {
result += item;
if (index < fruits1.length-1) result += `, `;
});
console.log(result); // > apple, banana, orange
}
{
// Solution
const result = fruits1.join(`, `);
console.log(result); // > apple, banana, orange
}
Q2. 문자열로 배열 만들기
String.prototype.split()
- 각 차이점
*slice: 기존 배열은 변하지 않고, 지정한 배열부분을 반환
- array.slice(2,5) 2번째꺼 부터 5번째 미만꺼를 return
- array.slice(0) 전부 반환
*splice: 기존 배열 변하고, 잘려진 배열 반환
- 어디서부터 몇개를 지울지, 지운애를 return
- array.splice(2,1), 2번째부터 1개를 지운후 지운해를 return 반환
- array.splice(0) 전부 지우고 지운 모든값을 return
*split: String객체를 지정한 구분자를 이용하여 여러 개 문자열로 나눔
- 잘라서 배열을 만든후 배열을 반환
const fruits2 = '🍎, 🥝, 🍌, 🍒';
{
// My
const result = [];
for (let item of fruits2) {
if ((item !== `,`) && (item !== ` `)) {
result.push(item);
}
}
console.log(result); // > ["🍎", "🥝", "🍌", "🍒"]
}
{
// Solution
const result = fruits2.split(`, `);
console.log(result); // > ["🍎", "🥝", "🍌", "🍒"]
}
split 예시
1. ('') 전부 각각 잘라 배열로 만듬
const fruits2 = '1,3,5,7';
const result = fruits2.split(''); //한글자씩 다 자름
console.log(result);
//["1", ",", "3", ",", "5", ",", "7"]
2. (',') ,를 찾아 기준으로 놓고 배열로 만듬
const fruits2 = '1,3,5,7';
const result = fruits2.split(',');
console.log(result);
//["1", "3", "5", "7"]
2. (' ') 를 찾아 기준으로 놓고 배열로 만듬
const fruits2 = '토끼가 껑충';
const result = fruits2.split(' ');
console.log(result);
//["토끼가", "껑충"]
Q3. 배열을 다음과 같이 만드십시오 : [5, 4, 3, 2, 1]
Array.prototype.reverse()
- 배열 원본 자체도 바뀐다.
const array1 = [1, 2, 3, 4, 5];
{
// My
array1.sort((a, b) => b - a);
console.log(array1); // > [5, 4, 3, 2, 1] : 기존의 배열이 바뀜
}
{
// Solution
const result = array1.reverse();
console.log(array1); // > [1, 2, 3, 4, 5] : 기존의 배열이 바뀜
// console.log(result); // > [1, 2, 3, 4, 5] : 리턴값 존재
}
Q4. 처음 두 요소없이 새 배열 만들기 [3,4,5]
Array.prototype.slice() || String.prototype.slice()
const array2 = [1, 2, 3, 4, 5];
{
// My
const result = array2.filter((item, index) => index > 1);
console.log(result); // > [3, 4, 5]
// console.log(array2); // > [1, 2, 3, 4, 5] : 기존의 배열은 변화가 없음
}
{
// Solution
const result = array2.slice(2, 5);
console.log(result); // > [3, 4, 5]
// console.log(array2); // > [1, 2, 3, 4, 5] : 기존의 배열은 변화가 없음
}
공통(Q5 ~ Q10)
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. 90 점의 학생 찾기
Array.prototype.find()
- 콜백 함수를 만들어서 작동시키며 blean값을 전달하여 최초의 true에 해당 하는 요소를 하나만 출력하니까 객체로 return 하고 break
{
// My
let result = {};
for (let index in students) {
if (students[index].score === 90) {
result = students[index];
break;
}
}
console.log(result); // > Student {name: "C", age: 30, enrolled: true, score: 90}
}
{
// Solution
const result = students.find((student) => student.score === 90);
console.log(result); // > Student {name: "C", age: 30, enrolled: true, score: 90}
}
Q6. enrolled 가 true인 학생들의 배열
Array.prototype.filter()
- 조건이 true면 요소들 전부 배열안에 리턴
{
// My
const result = [];
for (let index in students) {
if (students[index].enrolled) result.push(students[index]);
}
console.log(result); // > [Student, Student, Student]
}
{
// Solution
const result = students.filter((student) => student.enrolled);
console.log(result); // > [Student, Student, Student]
}
Q7. 학생의 점수 만 포함하는 배열 만들기
Array.prototype.map()
- 배열안의 모든 요소들을 콜백함수를 호출하면서 가공된 데이터가 배열로 리턴되어짐
// 결과는 다음과 같아야합니다. [45, 80, 90, 66, 88]
{
// My
const result = [];
students.forEach((item) => result.push(item.score));
console.log(result); // > [45, 80, 90, 66, 88]
}
{
// Solution
const result = students.map((student) => student.score);
console.log(result); // > [45, 80, 90, 66, 88]
}
Q8. 50 점 미만의 학생이 있는지 확인
Array.prototype.some()
- 배열의 요소들 중 콜백함수의 리턴 조건이 하나라도(or:||) true이면, true를 리턴
Array.prototype.every()
- 배열의 요소들 중 콜백함수의 리턴 조건이 모두(and:&&) true이면, true를 리턴
{
// My
students.forEach((item) => {
if (item.score < 50) console.log(true); // > true
});
}
{
// Solution
const result = students.some((student) => student.score < 50)
console.log(result); // > true
// const result2 = !students.every((student) => student.score >= 50)
// console.log(result2);
}
Q9. 학생들의 평균 점수 계산
Array.prototype.reduce()
- 배열 하나하나를 돌면서 무언가 누적할 때 쓰는 api
{
// My
let result = 0;
students.forEach((item, index) => {
result += item.score
if (index === students.length - 1) {
result = result / students.length;
}
});
console.log(result); // > 73.8
}
{
// Solution
// const result = students.reduce((prev, curr) => {
// console.log(prev); // return 된 값 (콜백함수의 2번째 인자가 없으면 값은 배열의 1번째 요소)
// console.log(curr); // 배열의 요소 (콜백함수의 2번째 인자가 없으면 배열의 2번째 요소부터 시작)
// console.log(`------------------`); // 구분선..
// return curr; // 다음 prev의 값으로 할당됨
// });
const result = students.reduce((prev, curr) => prev + curr.score, 0); // 콜백함수의 2번째 인자가 0이므로 첫 prev의 값은 0으로 할당됨
console.log(result / students.length); // > 73.8
}
Q10. 모든 점수를 포함하는 문자열 만들기
Array.prototype.map() / Array.prototype.join()
// 결과는 '45, 80, 90, 66, 88' 이어야합니다.
{
// My
let result = ``;
students.forEach((item, index) => {
result += item.score;
if (index < students.length - 1) result += `, `
});
console.log(result); // > 45, 80, 90, 66, 88
}
{
// Solution
const result = students
.map((student) => student.score)
// .filter((score) => score >= 50)
.join(`, `);
console.log(result); // > 45, 80, 90, 66, 88
}
Q11. Q10을 오름차순으로 정렬
Array.prototype.map() / Array.prototype.sort() / Array.prototype.join()
// 결과는 '45, 66, 80, 88, 90' 이어야합니다.
{
// My
const scoreString = `45, 80, 90, 66, 88`;
// step 1. 배열로 변환
const scoreStringArray = [];
let temp = ``;
for(let i in scoreString) {
if (scoreString[i] === `,`) {
scoreStringArray.push(Number(temp));
temp = ``;
continue;
}
if (scoreString[i] === ` `) continue;
temp += scoreString[i];
if (i == scoreString.length-1) scoreStringArray.push(Number(temp));
}
// step 2. 정렬
scoreStringArray.sort((a, b) => {
return a - b;
});
// step 3. 문자열로 변환
let result = ``;
scoreStringArray.forEach((item, index) => {
result += item;
if (index < scoreStringArray.length - 1) result += `, `
});
console.log(result); // > 45, 66, 80, 88, 90
}
{
// Solution
const result = students
.map((student) => student.score)
.sort((a, b) => a - b)
.join(`, `);
console.log(result); // > 45, 66, 80, 88, 90
}
728x90
'JavaScript' 카테고리의 다른 글
10. Callback 지옥 (0) | 2021.04.09 |
---|---|
9. JSON (0) | 2021.04.09 |
7. Array(1) (0) | 2021.04.09 |
6. Object (객체) (0) | 2021.04.09 |
5. Class 객체지향언어 (0) | 2021.04.09 |
Comments