TIL

2024.01.25 TIL #map #forEach문의 반환값? #reduce #Math.max(숫자) #while의 조건문 #Arr.unshift()

inz1234 2024. 1. 25. 21:20

1. map을 쓸 때는

- 내가 원하는 반환 값이 그 배열의 길이만큼 반환하는지!! 먼저 확인
- 그 배열의 "요소"를 가공해서 새로운 배열을 반환
- return 뒤에 로직이 새로 반환될 배열의 요소

다 아는 거 같다가도 헷갈린다..

 


2. forEach는

- 원래 반환값이 없고 안에 return 문이 있어도 undefined가 반환됨

그럼 언제 쓰이냐?


(1) forEach 문 안에서 요소마다 함수를 실행하거나

const numbers = [1, 2, 3, 4, 5];

numbers.forEach((number) => {
  console.log(number);
});


(2) 요소마다 "수정"할 때 효과적

const numbers = [1, 2, 3, 4, 5];
numbers.forEach((number, index, array) => {
  array[index] = number * 2;
});
console.log(numbers); // [2, 4, 6, 8, 10]

 

 

3. reduce 메서드

(1) 초기값이 없는 경우 

: 첫 cur는 2nd 요소

const numbers = [1, 2, 3, 4];
const dap = numbers.reduce((acc, cur) => {
  console.log("현재 acc :", acc, "현재 cur :", cur);
  return acc + cur;
 });
 console.log(dap); 

(2) 초기값이 있는 경우

: 첫 cur는 1st 요소
const numbers = [1, 2, 3, 4];
const dap = numbers.reduce((acc, cur) => {
  console.log("현재 acc :", acc, "현재 cur :", cur);
  return acc + cur;
}, numbers[0]);
console.log(dap);

 

(3) reduce의 매개변수   

let abc = dap.reduce((acc, curr, index) => {
    return acc + curr * 3 ** (3 - index);
  }, 0);


(4) reduce의 acc는 무조건 "더하기"가 아니라 "누적값"!!!

- 연산을 더하기를 쓸지 뭘 쓸지는 때에 따라 달라질 수 있음

let answer = [ 2,4,1,9,5]
let max = answer.reduce((acc, curr) => {
  return acc > curr ? acc : curr;
}, answer[0]);
-> 이런 식으로 꼭 "더하기" 연산이 아니어도 누적값이라는 개념으로 배열의 최댓값을 구할 수 있음


4. Math.max( ) 안에 들어가야 할 것은 "숫자"!!!

let answer = [1,2,3,4,5]

Math.max(answer) => NaN
Math.max(...answer) 
so, 배열을 넣고싶다면 ...로 풀어헤쳐서 넣어야 함 

 


5. while 문의 조건은 반복문이 실행될 수 있는 조건이면서, 동시에 반복문이 종료되는 조건이어야 한다. 

function solution(n) {
  let arr = [ ];
  while (n / 3 === 1) {
    let num = n % 3;
    arr.push(num);
    n = Math.floor(n / 3);
  }
  return arr;
}
console.log(solution(45)); 
=> n은 3이어야만 반복문이 실행되므로 처음 n은 45이기 때문에 애초부터 while문이 실행되지 않음

 


6. Array.prototype.unshift( )

- unshift() 메서드는 새로운 요소를 배열의 맨 앞쪽에 추가하고, 새로운 길이를 반환
const array1 = [1, 2, 3];
console.log(array1.unshift(4, 5));
console.log(array1);
// [4, 5, 1, 2, 3]