알고리즘 29 - Reversed sequence

Q.

Build a function that returns an array of integers from n to 1 where n>0.

Example : n=5 --> [5,4,3,2,1]

A)

const reverseSeq = n => {
  let buf = [];
  
  for (let i = 0; i < n; i++)
    buf.push(n - i);
  return buf;
};

other

풀면서도 뭔가 다른 메소드로 for문을 안 돌아도 될 방법이 있을 것 같은데...🧐 라고 생각했는데 다른 솔루션들을 보다가 .fill()을 발견했다! 이게 뭐지! 또 .map()의 인자를 두 개 받아오다니!! 이게 뭐란말인가!😱
new Array() : new Array(num)으로 num 길이의 배열을 만들어준다!
.fill() : arr.fill(value, start, end)이렇게 배열의 시작인덱스부터 끝 인덱스까지 value값을 채운다.
.map() : 각 요소에 접근하는데 i인덱스로 num 길이만큼 i + 1 (그러니까 1부터) 반환한다. d는 reduce처럼 누산기라고 생각하자!
마지막으로 .reverse()로 뒤집어준다.

const reverseSeq = num => {
  return new Array(num)
      .fill()
      .map((d, i) => i + 1)
      .reverse()
};

솔직히 이해가 잘 안 가서 직접 해 보았다.

new Array(3)                     // [비어 있음 × 3] 아예 값처럼 인덱스로 접근할 수 없다.
new Array(3).fill()              // [undefined, undefined, undefined]이제 접근할 수 있다!
new Array(5).fill().map(i => i + 1)                //[NaN, NaN, NaN]
new Array(3).fill().map((d, i) => i + 1)           // [1, 2, 3]
new Array(5).fill().map((d, i) => i + 1).reverse() // [3, 2, 1]

휴 새로운 new Array().fill()도 배우고 .map()의 색다른 활용에 대해서도 배웠다. map 이녀석 정말 만능인 것 같다. 잘 익혀서 나중에 나도 써먹어야지. 이렇게 undefined인 배열에 넣을 수 있다니!

좋은 웹페이지 즐겨찾기