Array

Yein Moon·2021년 6월 29일
0

개발일지

목록 보기
12/21
post-thumbnail

왜 사용하는가?
변수 하나에 하나의 값을 할당하면 방대한 데이터를 처리하는 경우 매우 비효율적이다.
이러한 경우 배열은 연관된 데이터를 뭉탱이로 관리하는데 용이하다.


배열의 표현

let arr = [ 10, 20, 30, '배열']

  • element : 배열 속 각각의 값들
  • index : element의 순번
    arr[1]과 같이 index값으로 element를 불러올 수 있다.

c.f. arr[1] = 40 은 첫번째 index값을 재할당한다. (문자열[i]는 재할당하지 못하고 열람만 가능했다!)


methods

  • arr.push 배열 맨 마지막에 추가
  • arr.pop 배열 맨 마지막 삭제
  • arr.unshift 배열 맨 처음에 추가
  • arr.shift 배열 맨 처음에 삭제
  • arr.splice(기준 인덱스, 삭제할 개수, 추가할 값) 배열 일부 삭제 또는 중간에 추가 참고 MDN
  • arr.concat(anotherArray) 배열 이어붙이기
  • arr.slice(start, end) 배열 자르기 참고 MDN

❗️ slice()는 method 사용 자체로 새로운 array를 복사하여 반환한다. Shallow copy.
배열이 함부로 수정되지 않도록 배열의 전부 혹은 일부를 복사

.slice() 활용 알아두기

let num = [0, 1, 2, 3, 4];
// 1. (A, B) 이면 A값부터 B 앞까지 반환
num.slice(0,2); // [0, 1] 

// 2. (A)이면 A값부터 끝까지 반환
num.slice(2); // [2, 3, 4]

// 3. (-A)이면 끝부터 A개 반환
num.slice(-2); // [3, 4]

// 4. (A, -B)이면 A부터 맨 뒤에서 B개 빼고 반환
num.slice(2, -1); // [2, 3]

판별하기

1. 데이터 타입이 array인가?

typeof로 확인하면 object라고 리턴하기때문에, 확실히 배열인지를 확인하기 위해서는 Array.isArray()를 사용한다.

2. 특정 element를 가지고 있는가?

  • array.indexOf() 있을때는 해당하는 index 값을, 없을 때는 -1을 리턴한다.
    Boolean값을 리턴하도록 함수화하는 것도 하나의 방법이다!

  • array.includes() 자체로 Boolean값을 리턴한다. 익스플로러에서는 지원을 하지 않음!!

3. 빈 배열인가?

  • arr.length === 0 인지 확인하자
  • ❗️arr가 빈 배열이어도 arr === []false를 반환한다.
    [] === [] 역시 거짓인데, 이는 주소값이 다른 두 빈 배열로 확인하기 때문!

문제를 풀어보자

Q8. 배열을 입력받아 가장 큰 요소를 반환하라

function getLargestElement(arr){
  let largest = arr[0]; 
  
  for(let i=1; i<arr.length; i++){
    if(largest < arr[i]){
      largest = arr[i+1];
    }
  }
  return largest;
}

👉🏾 Check 초기값을 arr[0]으로 정해주고 if문에도 변수를 활용한 것!


Q23. 0-9 사이의 정수를 요소로 갖는 배열을 입력받아, 전화번호 형식의 문자열을 리턴하라.

  • 리턴은 (010)1234-5678 형식으로 한다.
  • 배열의 길이가 8이라면, 앞에 [0, 1, 0]이 있다고 가정한다.
function createPhoneNumber(arr) {
  // 만약 배열의 길이가 8이라면, [0, 1, 0]을 배열의 앞에 추가한다.
  // slice로 세 부분으로 나누고 각각 변수를 선언하여 할당한다.
  // arr.join('')으로 세 파트를 각각 합쳐준다.
  // ${`(A)`B-C}

  let add010 = [0, 1, 0];
  if(arr.length === 8){
    arr = add010.concat(arr);
  }

  let firstPartArr = arr.slice(0, 3).join('');
  let secondPartArr = arr.slice(3, 7).join('');
  let thirdPartArr = arr.slice(7, 11).join('');

  return `(${firstPartArr})${secondPartArr}-${thirdPartArr}`;
}

👉🏾 Check arr.join('')은 공백없이 배열의 요소를 하나의 문자열로 합친다.


Q23. 수를 입력받아 해당 번째까지 피보나치 수열을 반환하라.

function fibonacci(num) {
  // 피보나치 누적 합을 의미하는 변수 선언한다

  let result = [0, 1];  

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

Check 👉🏾 배열의 모든 요소를 반복문으로 확인하려면 for of를 사용하자

profile
마스크 벗을 때쯤엔 주니어개발자 될끄니까

0개의 댓글