오늘은 프로그래머스의 암호해독을 가지고 js의 map, filter, reduce 사용법을 익혀봤다.
var answer = [...cipher].map((char,i)=>{char.filter((i)=> i%code ===0)}).join('');
내가 풀었던 거는 이랬다. 역시나 오류가 났다. filter를 쓸때도 배열이어야 하는데 char는 내가 그냥 부여한 가상의 어쩌고여서 사용할 수 없었다.
그래서 오늘도 유용하고 도움이 많이 되는 도구에게 물어봤다.
var answer = '' ;
for (let i = code - 1; i < cipher.length; i += code) {
answer += cipher[i];
}
을 줬다.. 포문으로 돌리는게 가장 정상적인 방법이지.. 나도 안다.. 그렇지만 map,filter, reduce를 익히고 싶은 내겐 도움이 되는게 아니었다.
그래서 다시 map과 filter를 써달라고 하니
var answer = [...cipher].filter((char, index) => (index +1) % code === 0).join('');
이렇게 줬다.. map과 필터를 둘다 쓸 필요가 없구나...
다시한번 map과 filter , reduce를 정독해야 겠다고 생각했다..
코드를 확인하는데 배수인데 (index +1) % code === 0매번 이렇게 0과 같음을 적으로고 하니 코드가 긴거 같았다. 다른 짧게 할 수 있는 방법이 없을까 고민했다.
나는 그냥 code*2를 하면 되지 않을까 했는데 (index +1) % code === 0 이렇게 쓰는 걸 보고 내가 생각한게 또 틀렸나보다 했다.. 그리고 직접 작성해 보니 index2이후의 모든 글자가 반환됐다.
이왕 이렇게 된거 map과 reduce를 만들어 봤다.
var answer = [...cipher].map((char, index) => (index + 1) % code === 0 ? char : '').join('');
answer = [...cipher].reduce((acc,char,index) => (index+1)%code ===0 ? acc+char : acc,'')
사실 reduce로 변환하는 건 오류가 났었다. {(index+1)%code ===0 ? acc+char : acc,''})로 하니까 undefind가 떳고 ""를 0으로 하니 또 이상한 답이 나왔다.
왜 어떤 때는 {}를 써야 답이 나오고 없어야 나오는지 잘 모르겠다. 무슨 차이지..? ,''는 초기값 아니었나...?
'자기개발 > TIL' 카테고리의 다른 글
영어 면접을 봤습니다. (0) | 2023.06.27 |
---|---|
프로그래머스 js 최대값 만들기(2) (0) | 2023.06.26 |
reduce 익히기 (0) | 2023.06.24 |
수학 어렵네.. (0) | 2023.06.22 |
내가 영어 면접을 보다니? (0) | 2023.06.21 |