1️⃣ 배열

  • 배열은 순서가 있는 데이터를 저장하는 자료구조입니다.
  • 여러 타입의 데이터를 저장할 수 있습니다.
  • 배열에 저장된 데이터를 요소라고 하며, 요소의 위치는 인덱스(index)라고 합니다.
    • 인덱스는 0부터 시작하는 정수입니다.
    • 대괄호( [] ) 안에 인덱스 번호를 작성해 해당 요소에 접근할 수 있습니다.
const mixedArray = ['Hello', 42, true, { name: 'John', age: 30 }];

console.log(mixedArray);
// 결과
[ 'Hello', 42, true, { name: 'John', age: 30 } ]

 

⚠️ 여기서 잠깐!
  • 배열은 요소가 순서를 유지하는, 특수한 형태의 객체입니다.
  • 일반 객체는 키를 통해 값에 접근하고, 배열은 인덱스를 통해 요소에 접근합니다.

 

2️⃣ 배열의 생성

  • 배열은 ‘ [ ] ‘ 또는 new Array()로 생성할 수 있습니다.
const array1 = new Array();
const array2 = []; 

 

➕ new와 생성자 함수
  • new는 새로운 객체를 생성하는 연산자입니다.
  • new와 함께 사용하는 Array()와 같은 함수를 생성자 함수라고 부릅니다.
  • Array()를 비롯한 일부 생성자 함수는 new 없이도 호출할 수 있습니다.

 

3️⃣ 인덱스로 요소에 접근하기

  • 인덱스를 이용해 배열의 요소에 접근하는 것을 ‘인덱싱’이라고 합니다.
  • 배열의 마지막 인덱스는 ‘배열의 전체 길이 - 1’입니다.
const seasons = ['spring', 'summer', 'autumn', 'winter'];

console.log(seasons[0]);
console.log(seasons[3]); 
// 결과
spring
winter

 

가방들 = ['캐리어','메신저 백','서류 가방'] 

 

객체는 : key 와 value가 한쌍인 property이다.

객체의 property는 순서가 중요하지않다.

key를 통해 배열을 꺼낼수있다.

 

배열 값이 일렬로 나열 n번째 데이터로 지목.

 

배열 vs 객체와 다른점 중괄호{} 가 아닌 대괄호[] 순서대로 나열함

const seasons = ['spring','summer','autumn','winter'];

 

const array = new Array();

const array = [];

 

배열은 순서대로 순서대로 값을 부여받게되는데 인덱스

 

const seasons ['spring','summer','autumn','winter'];

                             [0]           [1]            [2]          [3]

 

 

console.log(seasons[0]);  [0] 배열의 첫 번째값

console.log(seasons[3]);  [3] 배열의 네 번째 값

 

 

배열의 이름

대괄호 []

배열의 길이

대입 연산자 작성

 

const fruits = ['apple','lemon','kiwi','cherry','mango']

fruit[4] = 'mango';

 

console.log(fruits);

1️⃣ 배열의 길이 확인하기

  • length 속성을 사용해 배열의 길이를 확인할 수 있습니다.
const nums = [10, 16, 23, 29, 33, 37, 40];
console.log(nums.length);

 

// 결과
7
  • 배열의 length 속성은 읽기 전용이 아니기 때문에 직접 수정이 가능합니다.
  • length 속성을 감소시키면 길이를 벗어나는 요소가 자동으로 삭제됩니다.
  • length 속성을 증가시키면 배열의 길이가 증가하고, 새로운 요소는 undefined로 채워집니다.
const nums = [7, 11, 12, 21];
nums.length = 2;
console.log(nums);

nums.length = 4;
console.log(nums);
// 결과
[ 7, 11 ]
[ 7, 11, <2 empty items> ]


2️⃣ 배열에 요소 추가하기

인덱스를 사용한 요소 추가

  • 배열의 마지막 인덱스 이후에 새로운 요소를 추가해 배열을 확장할 수 있습니다.
const fruits = ['apple', 'lemon', 'kiwi', 'cherry'];
fruits[4] = 'mango';

console.log(fruits);
// 결과
[ 'apple', 'lemon', 'kiwi', 'cherry', 'mango' ]

 

push()를 사용한 요소 추가

  • push()를 사용해 배열의 마지막에 요소를 추가할 수 있습니다.
  • push()는 인수로 추가할 요소를 전달받습니다.
const characters = ['e', 'f', 'g'];
characters.push('h');
console.log(characters); 
// 결과
[ 'e', 'f', 'g', 'h' ]

 

unshift()를 사용한 요소 추가

  • unshift()를 사용해 배열의 시작 부분에 요소를 추가할 수 있습니다.
  • unshift()는 인수로 추가할 요소를 전달받습니다.
const characters = ['e', 'f', 'g', 'h'];
characters.unshift('d');
console.log(characters);
// 결과
[ 'd', 'e', 'f', 'g', 'h' ]

 

⚠️ 여기서 잠깐!
  • push()와 unshift()는 한 번에 여러 개의 요소를 배열에 추가할 수 있습니다.
  • 추가된 요소의 순서는 인수의 순서와 같습니다.
const characters = ['e', 'f', 'g'];
characters.push('h', 'i');
characters.unshift('c', 'd');
console.log(characters);
// 결과
[ 'c', 'd', 'e', 'f', 'g', 'h', 'i' ]

 

3️⃣ 배열에서 요소 삭제하기

pop()을 사용한 요소 삭제

  • pop()을 사용해 배열의 마지막 요소를 삭제할 수 있습니다.
const characters = ['e', 'f', 'g'];
characters.pop();
console.log(characters);
// 결과
[ 'e','f' ]

 

shift()를 사용한 요소 삭제

  • shift()를 사용해 배열의 첫 번째 요소를 삭제할 수 있습니다.
const characters = ['e', 'f'];
characters.shift();
console.log(characters);
// 결과
[ 'f' ]

'자바스크립트' 카테고리의 다른 글

객체 프로퍼티 접근 및 조회  (0) 2024.12.18
삼항연산자  (1) 2024.12.16
로또 번호 생성기 과제  (0) 2024.12.16
switch 함수  (0) 2024.12.12
if 문 / if ...else 문/ else if 절  (0) 2024.12.11

'함수로직풀기' 카테고리의 다른 글

없는 숫자 더하기  (0) 2024.12.24
핸드폰 번호 가리기  (0) 2024.12.20
음양 더하기  (0) 2024.12.19
서울에서 김서방 찾기  (1) 2024.12.17
두 정수 사이의 합  (0) 2024.12.13

'함수로직풀기' 카테고리의 다른 글

가장 작은 수 제거하기  (0) 2024.12.26
핸드폰 번호 가리기  (0) 2024.12.20
음양 더하기  (0) 2024.12.19
서울에서 김서방 찾기  (1) 2024.12.17
두 정수 사이의 합  (0) 2024.12.13

 

Add = 지정(장바구니), commit = 저장(장바구니에 있는 물건사기)

hello.html 저장을 해주고싶을떄 써준다.

 

 

 

 

 

깃허브 가입후

 

깃 허브 저장소가 만들어진다.

 

협력자 추가하기

 

 

 

 

 

'함수로직풀기' 카테고리의 다른 글

가장 작은 수 제거하기  (0) 2024.12.26
없는 숫자 더하기  (0) 2024.12.24
음양 더하기  (0) 2024.12.19
서울에서 김서방 찾기  (1) 2024.12.17
두 정수 사이의 합  (0) 2024.12.13

스타벅스 주문 시스템 만들기 (난이도 상)

<aside> 🔥

이 과제에서는 HTML, CSS, JavaScript를 사용하여 간단한 스타벅스 주문 시스템을 만드는 법을 배웁니다. 여러분은 HTML, CSS, JavaScript를 활용하여 기본 구조를 완성하고, 일부 로직을 직접 구현해보세요.

</aside>

Screen Recording 2024-09-09 at 3.38.33 AM.mov

1단계: 프로젝트 파일 구조 설정

먼저, 프로젝트를 시작하기 위해 기본 파일 구조를 설정합니다.

  1. 새 폴더 생성: 컴퓨터의 원하는 위치에 'starbucks-order-system'이라는 폴더를 만듭니다.
  2. 파일 생성: 아래와 같은 파일들을 폴더 안에 생성하세요.
    • index.html
    • styles.css
    • script.js

2단계: HTML 파일 만들기

이제 index.html 파일을 열고, 아래의 코드를 참고하여 HTML 구조를 완성해보세요. 링크 부분은 스스로 채워보세요.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>스타벅스 주문 시스템</title>
    <!-- 여기에 styles.css 파일을 로드하는 코드를 추가하세요 -->
</head>
<body>
    <h1>스타벅스 메뉴</h1>

    <div id="menu">
        <h2>메뉴</h2>
        <!-- 메뉴 아이템이 여기에 추가될 것입니다 -->
    </div>

    <div id="order-summary">
        <h2>주문 내역</h2>
        <ul id="order-list"></ul>
        <p>총 가격: ₩<span id="total-price">0</span></p>
        <button id="submit-order">주문 제출</button>
    </div>

    <!-- 여기에 script.js 파일을 로드하는 코드를 추가하세요 -->
</body>
</html>

3단계: CSS 파일 만들기

styles.css 파일에서 기본적인 스타일을 제공했습니다. 나머지 스타일은 스스로 작성해보세요.

body {
    font-family: Arial, sans-serif;
    padding: 20px;
    max-width: 600px;
    margin: 0 auto;
}

h1 {
    text-align: center;
}

/* 여기에 #menu와 #order-summary의 스타일을 추가하세요. */
/* 버튼과 관련된 스타일은 아래의 예시를 참고하여 완성하세요. */

button {
    background-color: #00704a;
    color: white;
    padding: 10px;
    border: none;
    border-radius: 5px;
    cursor: pointer;
}

button:hover {
    background-color: #005936;
}

4단계: JavaScript 파일 만들기

이제 script.js 파일을 열고, 아래의 코드를 참고하여 나머지 로직을 직접 구현해보세요.

document.addEventListener('DOMContentLoaded', () => {
    const menu = [
        { name: '아메리카노', price: 4100 },
        { name: '카페라떼', price: 4600 },
        { name: '카푸치노', price: 4600 },
        { name: '카라멜 마끼아또', price: 5800 },
        { name: '자바 칩 프라푸치노', price: 6300 },
        { name: '딸기 요거트 블렌디드', price: 6300 }
    ];

    let order = {};
    let totalPrice = 0;

    const menuContainer = document.getElementById('menu');
    const orderList = document.getElementById('order-list');
    const totalPriceElement = document.getElementById('total-price');
    const submitOrderButton = document.getElementById('submit-order');

    // TODO-1: 메뉴 아이템을 화면에 표시하는 코드를 작성하세요.
    // 힌트: menu 배열을 반복문(forEach)을 사용해 순회하며,
    
    // 각 메뉴 아이템을 div 요소로 생성한 후 menuContainer에 추가하세요.
    // div 요소 안에는 메뉴 이름과 가격을 표시하는 span 태그,
    // 그리고 '주문 추가' 버튼을 추가해야 합니다.
    
    // '주문 추가' 버튼에는 각 메뉴 아이템의 인덱스를 data-index 속성으로 저장하여,
    // 클릭 시 해당 메뉴를 식별할 수 있게 만드세요.

    // TODO-2: 주문 추가 로직을 작성하세요.
    // 힌트: menuContainer에 이벤트 리스너를 추가하고, 이벤트가 발생한 대상이 버튼인지 확인합니다.
    
    // 버튼의 data-index 속성을 이용해 어떤 메뉴가 클릭되었는지 파악한 후,
    // 해당 메뉴의 수량을 증가시키거나 새로 추가하세요.
    
    // 이후, 총 가격(totalPrice)을 업데이트하고,
    // 주문 목록을 업데이트하는 updateOrderList 함수를 호출하세요.

    // 예시 코드:
    // menu.forEach((item, index) => {
    //     // 각 메뉴 아이템에 대해 div 요소 생성 및 메뉴 아이템 추가
    // });

    // menuContainer.addEventListener('click', (event) => {
    //     if (event.target.tagName === 'BUTTON') {
    //         // 클릭된 버튼의 메뉴 아이템을 주문에 추가하는 로직 작성
    //     }
    // });
    
    // 주문 내역 업데이트 함수
    function updateOrderList() {
        orderList.innerHTML = '';
        for (let itemName in order) {
            const orderItem = order[itemName];
            const orderItemElement = document.createElement('li');
            orderItemElement.innerHTML = `
                ${itemName} - ₩${orderItem.price.toLocaleString()} x${orderItem.quantity}
                <button class="remove" data-item="${itemName}">삭제</button>
            `;
            orderList.appendChild(orderItemElement);
        }
        totalPriceElement.textContent = totalPrice.toLocaleString();
    }

    // 아이템 삭제 로직
    orderList.addEventListener('click', (event) => {
        const itemName = event.target.getAttribute('data-item');
        if (event.target.classList.contains('remove')) {
            totalPrice -= order[itemName].price * order[itemName].quantity;
            delete order[itemName];
            updateOrderList();
        }
    });

    // 주문 제출 로직
    submitOrderButton.addEventListener('click', () => {
        if (Object.keys(order).length > 0) {
            alert('주문해 주셔서 감사합니다!');
            order = {};
            totalPrice = 0;
            updateOrderList();
        } else {
            alert('주문 내역이 비어 있습니다!');
        }
    });
});

추가 설명:

  1. 메뉴 표시 힌트:
    • menu.forEach를 사용하여 각 메뉴 아이템을 순회하면서, document.createElement('div')를 통해 메뉴 아이템을 감쌀 div 요소를 생성합니다.
    • 생성된 div 안에 메뉴 이름과 가격을 표시할 span 요소를 추가하고, '주문 추가' 버튼을 생성하여 div에 추가합니다.
    • 마지막으로, 생성된 div를 menuContainer.appendChild를 통해 화면에 추가합니다.
  2. 주문 추가 로직 힌트:
    • menuContainer.addEventListener를 사용하여 클릭 이벤트를 감지하고, 클릭된 요소가 버튼인지 event.target.tagName을 통해 확인합니다.
    • 버튼의 data-index 속성을 활용하여, menu 배열에서 해당 메뉴를 가져오고, 이 메뉴가 이미 주문에 있는지 확인합니다.
    • 이미 주문에 있다면 order[menuItem.name].quantity += 1;로 수량을 증가시키고, 없다면 새로운 객체로 추가합니다.
    • 총 가격을 업데이트하고, updateOrderList() 함수를 호출하여 주문 목록을 갱신합니다.
  3. 나머지 로직들은 위에 구현해 놓은 것들을 그대로 쓰시면 됩니다. 지금은 ‘아..! 이렇게 구현이 되구나! 정도로 한번 보기만 해주세요!’

새 폴더 (2).zip
0.53MB

 

설명

  1. answer 변수를 0으로 초기화합니다.
  2. for 루프를 사용하여 absolutes 배열의 각 요소를 순회합니다.
    • signs[i]가 true이면 absolutes[i]를 더하고, false이면 absolutes[i]를 뺍니다.
  3. 최종 합계인 answer를 반환합니다.

'함수로직풀기' 카테고리의 다른 글

없는 숫자 더하기  (0) 2024.12.24
핸드폰 번호 가리기  (0) 2024.12.20
서울에서 김서방 찾기  (1) 2024.12.17
두 정수 사이의 합  (0) 2024.12.13
하샤드 수  (1) 2024.12.13

1️⃣ 객체 프로퍼티 접근 및 조회

  • 점 표기법(객체명.key)과 대괄호 표기법(객체명['key'])으로 프로퍼티에 접근할 수 있습니다.
  • 키에 공백 또는 특수문자가 포함된 경우 대괄호 표기법을 사용해야 합니다.
  • 객체의 프로퍼티 값을 조회하거나 변경할 수 있습니다.
const person = {
  name: 'John',
  age: 30,
  gender: 'male',
  'place of birth': 'Seoul',
};

console.log(person.name); // 점 표기법
console.log(person.age); // 점 표기법
console.log(person['gender']); // 대괄호 표기법
console.log(person['place of birth']); // 대괄호 표기법
// 결과
John
30
male
Seoul
person.age = 20;
console.log(person);
// 결과
{ name: 'John', age: 20, gender: 'male', 'place of birth': 'Seoul' }

 

2️⃣ 객체 프로퍼티 추가 및 삭제

점 표기법 사용하기

  • object.key = value 형식으로 객체에 새로운 프로퍼티를 추가하거나 수정할 수 있습니다.
  • delete object.key 형식으로 객체의 프로퍼티를 삭제할 수 있습니다.
person.bloodType = 'AB+';
delete person.gender;

 

대괄호 표기법 사용하기

  • object['key'] = value 형식으로 객체에 새로운 프로퍼티를 추가하거나 수정할 수 있습니다.
  • delete object['key'] 형식으로 객체의 프로퍼티를 삭제할 수 있습니다.
person['bloodType'] = 'AB+';
delete person['gender'];

 

 

객체에 생성된 데이터 key, value로 구성된 property 입니다.

 

 

'자바스크립트' 카테고리의 다른 글

배열이란?  (0) 2024.12.26
삼항연산자  (1) 2024.12.16
로또 번호 생성기 과제  (0) 2024.12.16
switch 함수  (0) 2024.12.12
if 문 / if ...else 문/ else if 절  (0) 2024.12.11

+ Recent posts