27장 배열 ~ 30장 Date

Boseong Choi·2023년 7월 13일
0

27.8 배열 메서드

배열에는 원본 배열을 직접 변경하는 메서드와 원본 배열을 직접 변경하지 않고 새로운 배열을 생성하여 반환하는 메서드가 있다.

27.8.1 Array.isArray

Array.isArray 메서드는 인수가 배열이면 true, 배열이 아니면 false를 반환한다.

27.8.2 Array.prototype.indexOf

Array.prototype.indexOf 메서드는 인수로 전달된 배열 요소를 검색하여 인덱스를 반환한다. 배열 요소가 여러 개 존재하더라도 처음으로 검색된 요소의 인덱스만 반환한다. 배열 요소가 존재하지 않으면 -1을 반환한다.

사용 예시 : 장바구니에 이미 있는 상품을 추가하려 할 때 사용

솔직히 includes 메서드가 더 편한듯.

push : 배열의 끝에 요소를 추가한다.
pop : 배열의 마지막 요소를 제거하고 제거한 요소를 반환한다.
unshift : 배열의 첫 번째 요소로 요소를 추가한다.
shift : 배열의 첫 번째 요소를 제거하고 제거한 요소를 반환한다.

Array.prototype.splice 와 Array.prototype.slice 의 차이점

splice : 원본 배열을 직접 변경한다.
slice : 원본 배열을 직접 변경하지 않고 새로운 배열을 생성하여 반환한다.

28장 Number

  • 빌트인 객체 Number는 원시 타입인 숫자를 다룰 때 유용한 프로퍼티와 메서드를 제공한다.

28.1 Number 생성자 함수

표준 빌트인 객체인 Number는 생성자 함수다. 따라서 new 연산자와 함께 호출하여 인스턴스를 생성할 수 있다.

563p Math.random

난수 생성하는 메서드. 0에서 1미만. 주로 단독으로 사용하지 않고 다른 메서드와 함께 사용한다.

1부터 9까지 난수 생성 코드

Math.floor(Math.random() * 9) + 1;

1부터 43까지 난수 생성 코드

Math.floor(Math.random() * 43) + 1;

29장 Math

표준 빌트인 객체 Math는 상수와 함수를 위한 프로퍼티와 메서드를 제공한다. 생성자 함수가 아니고 정적 프로퍼티와 정적 메서드만 제공한다.

30장 Date를 활용한 시계 예제.

function generateLottoNumbers() {
  let lottoNumbers = new Set();

  while (lottoNumbers.size < 6) {
    let randomNumber = Math.floor(Math.random() * 45) + 1;
    lottoNumbers.add(randomNumber);
  }

  return Array.from(lottoNumbers);
}

const koreanLottoNumbers = generateLottoNumbers();
console.log(koreanLottoNumbers);

let words = ["spray", "limit", "elite", "exuberant", "destruction", "present"];
const appendedWords = words.filter((word, index, arr) => {
  arr.push("new");
  return word.length < 6;
});

// 30.3 Date를 활용한 시간 예제

(function printNow() {
  const today = new Date();

  const dayNames = ['(일요일)', '(월요일)', '(화요일)', '(수요일)', '(목요일)', '(금요일)', '(토요일)'];

  // getDay: 요일을 나타내는 정수를 반환한다. (0 ~ 6)
  const day = dayNames[today.getDay()];

  const year = today.getFullYear();
  const month = today.getMonth() + 1;
  const date = today.getDate();
  let hour = today.getHours();
  let minute = today.getMinutes();
  let second = today.getSeconds();
  const ampm = hour >= 12 ? 'PM' : 'AM';

  // 12시간제로 변경
  hour %= 12;
  hour = hour || 12; // 0 => 12

  // 10미만인 분과 초를 2자리로 변경
  minute = minute < 10 ? '0' + minute : minute;
  second = second < 10 ? '0' + second : second;

  const now = `${year}${month}${date}${day} ${hour}:${minute}:${second} ${ampm}`;

  console.log(now);

  setTimeout(printNow, 1000);
})();

느낀 점

  1. 배열 메서드가 정말 다양하다. 종류가 많기도하고 자주쓰는 메서드들이기 때문에 주의하며 사용해야 할것 같다.

  2. Date 객체는 많이 불편하다. 날짜와 시간 처리가 복잡하고 정확성에서도 의문이 남는다. 달력을 구현할 때도 인덱스 처리 (1월은 0으로 시작) 때문에 불편했던 경험이 있다. 메서드 종류나 원리만 알고 라이브러리를 쓰는 것도 좋을듯.

profile
Frontend Developer

0개의 댓글