고슴맨쉬
망치와 공(空)
고슴맨쉬
  • 분류 전체보기 (155)
    • 💡 UXUI (4)
      • UXUI (2)
      • UI (2)
      • UX (0)
    • 🟨 JavaScript (66)
      • 개념 (42)
      • 정리 (2)
      • 문제풀기 (프로그래머스, 코딩애플) (15)
      • 응용하여 자동화or문제해결하기 (2)
      • 기타 (5)
    • ⚛️ React (49)
      • 개념 (27)
      • 개념(Redux) (3)
      • 정리 (4)
      • 문제풀기 (코딩애플: React) (15)
    • 📘 TypeScript (10)
      • 개념 (8)
      • 문제풀기 (코딩애플) (2)
    • 🌐 HTML,CSS (18)
      • 실무에서 자주 발생한 오류들 (10)
      • 뒤늦게 알아서 뼈아픈 유용한 CSS (6)
      • 기타 자주 쓰는 CSS (2)
    • 💻 CS (8)
      • CS (5)
      • 정규표현식 (2)
      • Git,Github (1)

태그

  • 삼항연산자
  • CSS
  • object
  • Ajax
  • TypeScript
  • json
  • useEffect
  • 오류
  • JavaScript
  • axios
  • array
  • class
  • 프로그래머스
  • 코딩애플
  • UXUI
  • Props
  • CS
  • state
  • react
  • redux
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
고슴맨쉬

망치와 공(空)

🟨 JavaScript/개념

[드림코딩] 유용한 배열(array) api (3) : reduce, reduceRight, sort, api 다중으로 쓰기

2022. 6. 15. 12:57
class Coder {
  constructor(name, age, enrolled, score) {
    this.name = name;
    this.age = age;
    this.enrolled = enrolled;
    this.score = score;
  }
}
const coders = [
  new Coder('A', 29, true, 45),
  new Coder('B', 28, false, 80),
  new Coder('C', 30, true, 90),
  new Coder('D', 40, false, 66),
  new Coder('E', 18, true, 88),
]

reduce

배열의 각 데이터에 주어진 리듀서(reducer)함수를 실행하고, 하나의 결과값을 반환한다.

리듀서 콜백함수는 네 개의 인자를 가진다.

  1. 누산기(acc, accumulator)
  2. 현재값(cur, currentValue)
  3. 현재 인덱스(idx, currentIndex)
  4. 원본 배열(src)
const result = coders.reduce((prev,curr) => {
  console.log('----------');
  console.log(prev);
  console.log(curr);
  return curr;
})
//아래가 나온다.
"----------"
// [object Object] 
{
  "name": "A",
  "age": 29,
  "enrolled": true,
  "score": 45
}
// [object Object] 
{
  "name": "B",
  "age": 28,
  "enrolled": false,
  "score": 80
}
"----------"
// [object Object] 
{
  "name": "B",
  "age": 28,
  "enrolled": false,
  "score": 80
}
// [object Object] 
{
  "name": "C",
  "age": 30,
  "enrolled": true,
  "score": 90
}
"----------"
.
.
.

이처럼 마지막에 return된 값이 prev에 할당된다.

initialValue를 제공하지 않으면, reduce()는 인덱스 1부터 시작해 콜백 함수를 실행하고 첫 번째 인덱스는 건너 뛴다. initialValue를 제공하면 인덱스 0에서 시작한다.

const result = coders.reduce((prev,curr) => {
  console.log('----------');
  console.log(prev);
  console.log(curr);
  return curr;
}, 0); //0으로 initialvalue를 제공했다.
"----------"
0
// [object Object] 
{
  "name": "A",
  "age": 29,
  "enrolled": true,
  "score": 45
}
"----------"
// [object Object] 
{
  "name": "A",
  "age": 29,
  "enrolled": true,
  "score": 45
}
// [object Object] 
{
  "name": "B",
  "age": 28,
  "enrolled": false,
  "score": 80
}
"----------"
.
.
.

0부터 모든 score들을 더해보자.

const result = coders.reduce((prev,curr) => {
  console.log('----------');
  console.log(prev);
  console.log(curr);
  return prev + curr.score;
}, 0);
console.log(result);
"----------"
0
// [object Object] 
{
  "name": "A",
  "age": 29,
  "enrolled": true,
  "score": 45
}
"----------"
45
// [object Object] 
{
  "name": "B",
  "age": 28,
  "enrolled": false,
  "score": 80
}
.
.
.
281
// [object Object] 
{
  "name": "E",
  "age": 18,
  "enrolled": true,
  "score": 88
}
369

위의 함수를 마지막 결과값만 나오도록 간단하게 바꿔보자.

전

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

후

const result = coders.reduce((prev,curr) => prev + curr.score, 0);
console.log(result);

위의 함수를 평균값을 구하도록 바꿔보자.

const result = coders.reduce((prev,curr) => prev + curr.score, 0);
console.log(result / students.length);

reduceRight

reduce를 거꾸로 (제일 뒤에서부터) 시작한다.


Sort

마이너스 값을 리턴하게 되면 첫번째가 두번째보다 작다고 간주되어 정렬한다.

const result = coders
  .map((coder) => coder.score)
  .sort((a, b) => a - b)
  .join();
console.log(result);

//"45,66,80,88,90"

* 이처럼 compareFunction을 사용하지 않으면 그냥 문자열로 받아들여 유니코드순으로 정렬한다.
** 반대로 b-a로 쓰면 숫자 역순 정렬이 된다.


api 다중으로 쓰기

함수형 프로그래밍이라고도 한다. 아래처럼 api를 다중으로 쓸 수 있다.

const result = coders
  .map((coder) => coder.score) //score만 모아 새로운 배열 만들기
  .filter((score) => score >= 50) //50보다 큰 score만 솎아내기
  .join(); //배열을 string으로 변환하기
console.log(result);

//"80,90,66,88"

출처 : 드림코딩 https://www.youtube.com/@dream-coding / MDN https://developer.mozilla.org/ko

저작자표시 비영리 동일조건 (새창열림)

'🟨 JavaScript > 개념' 카테고리의 다른 글

[드림코딩] Object to JSON (stringify)  (0) 2022.06.29
[드림코딩] JSON이란?  (0) 2022.06.29
[드림코딩] 유용한 배열(array) api (2) : filter, map, some, every  (0) 2022.06.09
[드림코딩] 유용한 배열(array) api (1) : join, split, reverse, slice, find  (0) 2022.06.07
[mdn, 드림코딩 외] 배열(array) (4) : 검색 (indexOf,lastIndexOf,includes)  (0) 2022.06.02
    '🟨 JavaScript/개념' 카테고리의 다른 글
    • [드림코딩] Object to JSON (stringify)
    • [드림코딩] JSON이란?
    • [드림코딩] 유용한 배열(array) api (2) : filter, map, some, every
    • [드림코딩] 유용한 배열(array) api (1) : join, split, reverse, slice, find
    고슴맨쉬
    고슴맨쉬
    부수되 집착하지 않고, 이해하되 머무르지 않기

    티스토리툴바