코플릿 -배열

안윤경·2022년 7월 7일
0

과제

목록 보기
3/20

1.임의의 값을 입력받아 타입을 리턴해야 합니다.

function getNthElement(arr, index) {
  // 2--index[2] -->a
  //길이가 오버된다면 out of index range' index> arr.length 
  //
  if( arr.length === 0 && Array.isArray(arr) ){
    return undefined
  }else if(index > arr.length-1){ //배열의 길어 >인덱스
    return 'out of index range'
  }
  return arr[index]
}

헷갈린점 : arr.length 배열이 ===0이면 빈배열이 되는걸 몰랐다
else if(index > arr.length-1){ //배열의 길어 >인덱스
return 'out of index range' 이부분에서 조건부분이 헷갈렸다 index >= arr.length도 가능

4.배열과 수를 입력받아 수가 인덱스로 가리키는 배열의 요소를 리턴해야 합니다.

function getLargestElement(arr) {
  // javascript의 다양한 반복문 문법(syntax)을 검색해 봅니다. (`mdn for in` 또는 `mdn for of`)
  let max = arr[0];
  for (let el of arr) {
    if (el > max) {
      max = el;
    }
  }
  return max;
}

헷갈린점 : 이문제는 헷갈렸다기 보단 let el of arr 즉 for of구문의 사용법을 익히는 것
이건 일부가 아닌 전체를 다룰 때 유용! 반복문을 쓰는 건 무엇이 계속 값이 나와야할 경우 반복문을 써서 반복시키는거 -->>이거 헷갈린다
*split 함수 쓸때 (' ')처럼 공백이 있음 단어로 자르고
13.mergeArrays

function mergeArrays(arr1, arr2) {
  // TODO: 여기에 코드를 작성합니다.
  return [...arr1 , ...arr2];
}

헷갈린 점 : 위에 페어분과 같이 한 코드에서는 [...arr1,...arr2] 처럼 ...을 3개써서 배열을 풀어 나오게 한후 []써서 배열로 만든거다. 다만 레퍼런스에는 concat을 사용했는데 concat은

[배열명].concat([배열명]);

처럼 쓰는 거다 그러므로 return arr1.concat(arr2); 이 들어가게 된다

*split 함수 쓸때
function arr('l am code') 일시에 (' ')처럼 공백이 있음 단어 기준으로 [ 'i' , 'am' ,'code'] 이런식으로 자르고 ('')라면 ['i','a','m',.....]이런 식으로 잘린다.

18.removeFromFront

function removeFromFront(arr) {
  // TODO: 여기에 코드를 작성합니다.
  arr.shift();
  return arr;
}

헷갈린점 : 함수 자체가 헷갈린 것 보다 기존 배열에 첫번째 요소가 삭제된 배열(주소값 동일)을 리턴해야 합니다.
즉 slice와 shift의 차이인 주소값에 대하여 좀더 알아야함 객체배우고 다시쓰기ㅜㅜ

slice는 원래 배열을 복제한 후 자르는 것이고 shift같은 메서드는 복제하지 않고 기존배열에서 삭제하는 것이다 slice() 이면 원본배열을 모두 새로운 배열로 나타냄 -> [a,b,c]일때 ['a','b','c'...]이런식? 그리고 slice(n)이면 n이후 배열 마지막까지를 말한다 number -->number로 잘려지고 문자열이면 문자열로 잘라지는건가요?
22.addToFrontOfNew

function addToFrontOfNew(arr, el) {
  // TODO: 여기에 코드를 작성합니다.
 let ans =arr.slice();

 ans.unshift(el);
 return ans
}

헷갈린점 :분명 새로운 배열(주소값 다름) / (immutability)이어야 한다는데 unshift를 썻길래 왜 그런가 했더니 레퍼런스를 보니 새로운 함수를 반들고 slice로 배열을 복제하여 기존 배열은 유지하고 새로운 함수에 unshift를 써서 새로운 배열을 만드는 것이다 ->혹시모르니 다시

createPhoneNumber(중요)
문제
0-9 사이의 정수를 요소로 갖는 배열을 입력받아 전화번호 형식의 문자열을 리턴해야 합니다.

function createPhoneNumber(arr) {
  // TODO: 여기에 코드를 작성합니다.
이건 레퍼런스
  let head = '(010)';
  const len = arr.length;
  const body = arr.slice(len - 8, len - 4).join('');
  const tail = arr.slice(len - 4, len).join('');

  if (len === 11) {
    head = `(${arr.slice(0, 3).join('')})`;
  }

  return `${head}${body}-${tail}`;
}

이건 같이푼거

function createPhoneNumber(arr) {
  // 입력 : [0, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8]
  // 출력 : '(010)1234-5678'
  // `${(arr[0]~arr[2]}${arr[3]~arr[6]}-${arr[7]~arr[11]}`
  // first, second, third라는 변수를 선언하고, 각각 할당한다.
  // slice()메서드로 배열의 일부를 복사 한 후 join()메서드로 문자열로 변경한다.
  let first = arr.slice(0, 3).join('');
  let second = arr.slice(3, 7).join('');
  let third = arr.slice(7).join('');

  // 2. 주어진 배열의 길이가 8인 경우
  if (arr.length === 8) {
    first = '010';
    second = arr.slice(0, 4).join('');
    third = arr.slice(4).join('');
  }

  // 1. 템플릿 리터럴에 각각의 변수를 넣어 리턴한다. -> 길이가 8인 경우를 위해 분기 필요
  return `(${first})${second}-${third}`;
}

// 리팩토링
function createPhoneNumber(arr) {
  // 길이가 11일 때와 8일 때 second와 third를 각각 재할당해야 하는 이유는
  // slice() 메서드를 사용할 때 앞에서부터 복사했기 때문이다.
  // arr.length를 기준으로 뒤에서 부터 복사하기
  let first = arr.slice(0, 3).join('');
  let second = arr.slice(arr.length - 8, arr.length - 4).join('');
  let third = arr.slice(arr.length - 4).join('');

  // 2. 주어진 배열의 길이가 8인 경우
  if (arr.length === 8) {
    first = '010';
    // 이 경우 second와 third의 재할당이 필요 없다.
  }

  return `(${first})${second}-${third}`;
  // 추가 리팩토링: 가독성을 떨어 뜨리는 반복적으로 사용되는 코드를 하나의 변수에 할당할 수 있다.
}  splice를 사용해서도 가능하다고함

헷갈린점 : slice뒤에 join을 써도되는 지 몰랐다
이건 다시다시

25.fivonacci

function fibonacci(num) {
  // TODO: 여기에 코드를 작성합니다.

  let fibo = [0];
  let sum = 1;

  for( let i = 1; i <= num ; i++){
    fibo.push(sum);
    sum =sum + fibo[i - 1];
  }
  return fibo;
}

주말에다시다시....ㅠ이해는 했는데 말로설명이히ㅣㅁ들다..

profile
프론트엔드 개발자 안윤경입니다

0개의 댓글