22.08.12 TIL

uub_2·2022년 8월 12일
0

Today I Learned

목록 보기
5/6

Array.prototype.map()

map()은 배열 안의 모든 요소에 대해 함수를 호출한 결과를 모아서 새로운 배열을 반환한다.

arr.map(callback(currentValue[, index[, array]])[, thisArg])

var numbers = [1, 4, 9];
var doubles = numbers.map(function(num) {
  return num * 2;
});
// doubles는 이제 [2, 8, 18]
// numbers는 그대로 [1, 4, 9]

map() 은 콜백함수를 호출하며 currentValue는 처리할 현재 요소를, index는 처리할 현재 요소의 인덱스를, array는 map()을 호출한 배열을, thisArg는 콜백함수를 실행할 때 this로 사용되는 값을 말한다.
이때 return 값은 배열의 각 요소에 콜백함수를 실행한 결과를 모아 새로운 배열을 반환한다.

this에 대해서 다음에 더 조사하기

이상한 문자열 만들기

내가 쓴 코드

function solution(s) {
    let strArr = s.split(' ')
    let answer = strArr.map((arr) => {
        strArr.map((arr, index) => index % 2 == 0 ? arr.toUpperCase : arr.toLowerCase)
    }) 
    return answer
}

실행 결과

왜 null이 나왔지 ........
strArr에 s를 공백 기준으로 나눈 값을 할당하고, answer을 선언했다. 선언 내용은 sreArr를 맵으로 돌려서 index의 길이가 2로 나눈 값이 0이라면 대문자로 바꾸고, 아니라면 소문자로 바뀌게 하려고 했다.

function solution(s) {
  return s
    .split(" ")
    .map((word) =>
      word
        .split("")
        .map((char, index) =>
          index % 2 === 0
            ? word[index].toUpperCase()
            : word[index].toLowerCase()
        )
        .join("")
    )
    .join(" ");
}

그래서 찾아본 답
split을 이용해 공백 기준으로 s를 나누고, map과 split을 사용해서 단어를 한 글자씩 떼 배열에 넣은 다음 다시 map을 이용해서 인덱스 길이를 2로 나눴을 때 0이라면 대문자, 아니라면 소문자로 적용하였다.
join을 이용해 글자를 한 글자씩 붙여주고, 공백을 제거한 뒤 다시 배열로 만들어준다.

내가 뻬먹은 부분
1. 단어 한 글자씩 분리해주기
2. 분리한 글자 다시 배열로 만들어주기

profile
우웁이

0개의 댓글