🗃️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));