카테고리 없음

JavaScript* 함수 Quiz

해보구 2024. 3. 29. 19:45

여기 예제가 있다.

const traders = [
  {
    trader: {
      name: "김철수",   // traders[0].trader.name
      city: "대전",
    },
    year: 2023, // traders[1].year
    value: 500000,
  },
  {
    trader: {
      name: "박영희",
      city: "서울",
    },
    year: 2022,
    value: 600000,
  },
  {
    trader: {
      name: "김철수",
      city: "대전",
    },
    year: 2022,
    value: 1200000,
  },
  {
    trader: {
      name: "박영희",
      city: "서울",
    },
    year: 2023,
    value: 650000,
  },
  {
    trader: {
      name: "뽀로로",
      city: "부산",
    },
    year: 2023,
    value: 800000,
  },
  {
    trader: {
      name: "루피",
      city: "대전",
    },
    year: 2022,
    value: 780000,
  },
];

 

우선 필터와 맵핑함수들을 만들어준다.

// 1. **2023년에 대전에서 발생한 모든 거래의 총액을 계산해주세요.**
// let totalInDaejeon2023 = 0;
// for (const trs of traders) {
//   if (trs.year === 2023 && trs.trader.city === '대전') {
//     totalInDaejeon2023 += trs.value;
//   }
// }

const totalInDaejeon2023 = traders
  .filter((trs) => trs.year === 2023 && trs.trader.city === '대전')
  .reduce((total, trs) => total + trs.value, 0);

console.log(`2023년 대전 총 거래액: ${totalInDaejeon2023}`);

 

방법 2가지

1. 가상의 변수를 만들어주고 for 문을 사용하거나

 

 

1. filter를 사용해 우선 지정된 traders의 다른이름 trs고 연도를 찾아줄거니까 year, 2023 그리고 city가 대전인 곳을 잡기

2. reduce를 사용해준다 reduce 파라미터의 왼쪽값은 전체값을 의미하고 오른쪽은 함수가 돌아다닐때 거치는 현재 값들을 의미한다.

 옆에 숫자 0 은 초기값을 말한다. total은 가상의 전체값이라 보면되고 그렇기때문에 reduce가 반복하며 계산한 value를 더해주는것이다.

 

 

/ 2. **부산에서 거래한 모든 거래자의 이름을 배열에 담아 출력해주세요.**
console.log('======================');

// const nameListInBusan = [];
// for (const trs of traders) {
//   if (trs.trader.city === '부산') {
//     nameListInBusan.push(trs.trader.name);
//   }
// }

const nameListInBusan = traders
  .filter((trs) => trs.trader.city === '부산')
  .map((trs) => trs.trader.name);

console.log('부산 거래자 이름리스트: ', nameListInBusan);

 

우선 배열에 담으라니 빈배열을 만들어준다

for문을 사용할거면 for of를해주는데 이떄 for of는 걍 한번 쭉돌아봐~ 랑같다 마치 i< 배열.length 하듯이

하고 push명령어로 배열에 담아준다

 

다음방법

filter로 부산인 값을 걸러준다 그리고 map으로 이름을 찾는다

 

 

 

// 3. **모든 거래 중 가장 높은 거래액을 가진 거래의
//   거래자 정보(이름, 도시)와 거래액을 출력해주세요.**
console.log('============================');



const highestTransaction = traders.reduce((max, trs) =>
  max.value < trs.value ? trs : max
);

console.log(
  `가장 높은 거래액 정보 - 이름: ${highestTransaction.trader.name}, 도시: ${highestTransaction.trader.city}, 거래액: ${highestTransaction.value}`
);

reduce로 가상의 정답 맥스값, 쭉돌면서찾을 낮은사람 돌리고

총합이 낮은사람보다 작으면 trs로 남고 아닌 사람을 max로 저장해준다