250x250
Notice
Recent Posts
Recent Comments
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

진스

8. Array(2) (퀴즈문제) 본문

JavaScript

8. Array(2) (퀴즈문제)

입방정 2021. 4. 9. 17:44
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