🗃️javascript/코테 프레임 문제

2-5 등수 구하기[배열은 참조타입 | reduce, map은 각 요소에 return문 반환]

하얀성 2024. 4. 15. 10:31

배열은 참조타입이다.

 

스프레드를 통한 새로운 배열로 복사.(참조x) 

기존 배열은 바뀌지 않은 모습을 확인할 수 있다.

function solution(arr) {
  let copy = [...arr].sort();
  return [copy, arr];
}

let arr = [87, 89, 92, 100, 76];
console.log(solution(arr));


기존의 배열은 참조타입이여서 새롭게 배열을 변수에 복사한 후, 그 변수에 메서드를 적용해줘도

기존 배열에 까지 영향을 미침.

function solution(arr) {
  let copy = arr;
  copy.sort();
  return [copy, arr];
}

let arr = [87, 89, 92, 100, 76];
console.log(solution(arr));


reduce, map은 각 요소에 return문을 취한다.

 

reduce 메서드는 return문을 취해서 acc를 계속 늘려가준다.

const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((accumulator, currentValue) => {
  return accumulator + currentValue;
}, 0); // 0은 초기값입니다.
console.log(sum); // 출력: 10

 


 

map()에서도 return 문이 중요합니다. 각 요소에 적용된 함수의 반환 값이 새 배열의 요소가 됩니다.

 

const numbers = [1, 2, 3, 4];
const doubled = numbers.map(number => {
  return number * 2;
});
console.log(doubled); // 출력: [2, 4, 6, 8]

반면 forEach 문은 return문을 반환하지 않고 배열의 변화만 일으켜준다.

const numbers = [1, 2, 3, 4];
numbers.forEach(number => {
  console.log(number);
});
// 출력: 1, 2, 3, 4
// 반환값: undefined

문제풀이

 

 

1.forEach 때문에 undefined가 출력된다.

2. answer라는 다른 변수를 만들어야 한다.

function solution(arr) {
  const copy = [...arr].sort((a, b) => b - a);
  let answer = [];
  const checkRank = arr.forEach((x) => {
    answer.push(copy.indexOf(x)+1);
    return answer;
  });
  return checkRank;
}

let arr = [87, 89, 92, 100, 76];
console.log(solution(arr));

 


return문을 쓰는 내용을 이해한 상황.

각 요소마다의 결과를 리턴하도록하여 새로운 arr변수가 완성되도록 한다.

function solution(arr) {
  const copy = [...arr].sort((a, b) => b - a);

  const checkRank = arr.map((x) => {
    return copy.indexOf(x) + 1;
  });
  return checkRank;
}

let arr = [87, 89, 92, 100, 76];
console.log(solution(arr));