17_Array

3017 단어 TILTIL

# 오늘 한 일

  • 배열 method

Q: 평균을 구하는 함수를 만드시오.

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),
];

function average(score) {
    const result = students
      .filter(student => student.score >= score)
      .map(student => student.score)
      .reduce((prev, curr) => (prev + curr), 0);
    const howMany = students.filter(student => student.score >= score)
    console.log(result/howMany.length);
}
average(80);
  • 리뷰

.filter(student => student.score >= score)
:: 조건에 맞는 score를 value값으로 가진 element를 return한다.

  new Student('B', 28, false, 80)
  new Student('C', 30, true, 90)
  new Student('E', 18, true, 88)

.map(student => student.score)
:: 위의 element가 가진 score의 value값만 return한다.

[80, 90, 88]

.reduce((prev, curr) => prev + curr, 0);
:: 위의 값을 더한다.

258

조금 더 풀어서 설명하자면

1) reduce는 return값을 정해줘야 한다.
2) initial value를 숫자로 입력하지 않을 경우 NaN오류 발생
3) initial value는 prev + curr, 0에서 0처럼 지정 가능
4) parameter 값은 임의로 설정해도 문제는 없지만, 다른 개발자가 봤을 때도 이해하기 쉽게 작성해야 한다.

.reduce((prev, curr) => {
  console.log('----');
  console.log(prev);
  console.log(curr);
  return prev + curr;
}, 0);

// 결과값:
// ----
// 0
// 80
// ----
// 80
// 90
// ----
// 170
// 88

const howMany = students.filter(student => student.score >= score)
console.log(result/howMany.length);
:: 위에서 찾은 값을, 조건에 맞는 score를 가진 element의 개수로 나누어 평균값을 구한다.

console.log(result) // 258
console.log(howMany) // [80, 90, 88]
console.log(howMany.length) // 3

console.log(result / howMany.length) // 86
  • filter / find
    :: 조건에 맞는 element를 찾아서 해당 element를 return하는 method. (element가 객체면 해당 객체를 return한다.)
    :: 단, find는 조건에 맞는 첫 번째 element만을 return한다.

  • map
    :: element를 return할 수도 있고, element가 객체일 때는 value값을 return할 수도 있다.

const number = [2, 4, 5, 7, 10];
number.map(num => num);
// 결과값: [2, 4, 5, 7, 10]

number.map(num => num * 3);
// 결과값: [6, 12, 15, 21, 30]

좋은 웹페이지 즐겨찾기