DAY 10. 배열

냐하호후·2021년 6월 28일

4 get Nth Element

입출력예시

let output = getNthElement([1, 3, 5], 1);
console.log(output); // --> 3

output = getNthElement([1, 3, 5], 3);
console.log(output); // --> 'out of index range'
function getNthElement(arr, index) {
 if(arr.length === 0) {
   return undefined;
 } else if (arr.length -1 < index) {
   return 'out of index range'
 } else {
   return arr[index]
 }
}

처음에 생각한 includes나 indexOf, arr.find 를 이용해서 열심히 삽질을 해보았으나 실패했다
사실 다 그 element가 배열안에 존재한다는걸 알려주는 겹치는 역할이라
그 메소드들을 활용하는 방법에 실패한 것이아니라 접근 자체가 잘못되었던 것이다

8 get Largest Element

입출력예시


let output = getLargestElement([1, 4, 3]);
console.log(output); // --> 4

output = getLargestElement([-4, -2, -9]);
console.log(output); // --> -2
function getLargestElement(arr) {
  let max = arr[0];
  for (let el of arr) {
    if (el > max) {
      max = el;
    }
  }
  return max;
}

그냥 Math.max 메소드를 사용했지만 문제의 의도에맞게 for of를 사용하여 다시 풀어보았다
arr[0]이 가장 큰 값이라고 할당해준다
arr배열 안에 el이라는 요소가 있다
el이라는 요소가 가장 크다면
max는 el이다

24 create Phone Number

입출력 예시

let output = createPhoneNumber([0, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
console.log(output); // --> '(010)1234-5678'

output = createPhoneNumber([8, 7, 6, 5, 4, 3, 2, 1]);
console.log(output); // --> '(010)8765-4321'
function createPhoneNumber(arr){
  let head, body, tail
  if(arr.length === 11) {
    head = arr.slice(0,3).join("")
   body = arr.slice(3,7).join("")
   tail = arr.slice(7,arr.length).join("")
  }else{
    head ="010"
    body= arr.slice(0,4).join("")
    tail = arr.slice(4).join("")
  }
  return `(${head})${body}-${tail}`
}

arr.length가 8인 경우와 11자리인 경우로 나눈다
배열의 맨앞을 '(010)'으로 만들어준다 그냥 (010)은 변수취급당한다
뒤의 8자리 숫자는 4자리와 4자리 사이에 -를 붙여준다
[]배열을 --> "" string타입으로 배열해야한다
번호를 3등분으로 나눠서 따로 숫자를 모아준 후에 string타입으로 묶어준다
join()을 쓰면 [n,n,n] 배열이 'nnn' 으로 써진다

25 fibonacci

입출력 예시

let output = fibonacci(5);
console.log(output[5]); // --> 5

output = fibonacci(9)[9];
console.log(output); // --> 34
function fibonacci(num) {
  let fibNum = [];

  for (let i = 0; i <= num; i++) {
    if (i === 0) {
      fibNum.push(0);
    } else if (i === 1) {
      fibNum.push(1);
    } else {
      fibNum.push(fibNum[i - 2] + fibNum[i - 1]);
    }
  }

  return fibNum;
}

피보나치 수는 F(0) = 0, F(1) = 1일 때,
2 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 점화식이다.

for in과 for of

for in과 for of는 반복이 가능한 객체의 모든 원소를 하나씩 추출하여 변수에 담아 반복문을 수행하는 문법이다.
for in은 주로 객체에서 사용하고 for of는 배열에서 사용한다

  • for in 반복 대상
    Iterable object이면 모두 반복할 수 있는 대상이 된다.

  • for of 반복 대상
    Iterable object이지만, prototype chain에 의한 Iterable은 반복 대상에서 제외된다.

let list = [4, 5, 6];

for (let i in list) {
   console.log(i); // "0", "1", "2",
}

for (let i of list) {
   console.log(i); // "4", "5", "6"
}
let pets = new Set(["Cat", "Dog", "Hamster"]);
pets["species"] = "mammals";

for (let pet in pets) {
   console.log(pet); // "species"
}

for (let pet of pets) {
    console.log(pet); // "Cat", "Dog", "Hamster"
}
profile
DONE is better than PERFECT

0개의 댓글