본문 바로가기

study

혼공 JS 3주차

 

■ 내용정리

<배열>

· string에서도 문자열을 구분지어서 처리

const str = "안녕하세요"
console.log(str[1]) // 배열이 아니지만, [1] 이렇게 값을 출력가능
console.log(str.length)

 

· 배열 만들기

배열은 [...] 형식으로 만듭니다.

// 배열안에 배열을 넣을수도 있고, 다양한 구성을 할수 있습니다.
const array = [273, 'String', true, function () {}, {}, [23,4,5,5], undefined]
console.log(array.length) // 7

 

· 배열 뒷부분에 요소 추가하기

3가지 방법이 있습니다.

1) 배열.push(요소)

2) 배열 뒷부분에 요소 추가

3) 인덱스를 식별해서 추가

// case1
const data1 = ["가", "나", "다"]
data1.push("라")
console.log(data1) // [ '가', '나', '다', '라' ]

// case2
const data2 = ["가", "나", "다"]
data2[10] = "라"
console.log(data2) // [ '가', '나', '다', <7 empty items>, '라' ]
console.log(data2.length)   // 11, 빈값까지 포함해서 길이에 포함
console.log(data2[5])   // 빈값으로 정의한 것은 undefined 의 값을 가집니다.

// case3
const data3 = ["가", "나", "다"]
data3[data3.length] = "라"   // 마지막 index를 지정한다.
console.log(data3) // [ '가', '나', '다', '라' ]

 

 

· 배열 요소 제거하기

1) 인덱스를 기반으로 제거하기 : splice() 이용

 L splice는 접합의 의미로, 제거하는 역활 또는 중간에 넣을때도 사용 가능 / slice와 splice를 혼돈하면 안됩니다.

 

 

- slice에 대해서 살펴보기

// slice는 배열, 문자열 모두 사용이 가능합니다.
// slice의 결과값은 잘라낸, 결과값이 있고
// 원본데이터 Item은 그대로 유지된다.
const item = ["가", "나", "다"]
const result = item.slice(1)    // result : [ '나', '다' ] / item : [ '가', '나', '다' ]
const result = item.slice(1,2)  // result : [ '나' ] / item : [ '가', '나', '다' ]

const item = "가나다라마"
const result = item.slice(1)    // result : 나다라마 /  item : 가나다라마
const result= item.slice(2,4)   // result : 다라 /  item : 가나다라마

 

- splice에 대해서 살펴보기

 : 사용법 - 배열.splice(인덱스, 제거할 요소의 개수)

// splice 배열에만 사용이 가능하고, 문자열에서는 사용불가능하다
// slice의 return값은 제거된 요소가 배열로 리턴됩니다
// 원본데이터 Item의 항목이 제거된다.!!!
const item = ["가", "나", "다"]
const result = item.splice(1)    // result : [ '나', '다' ] / item : [ '가' ]
const result = item.splice(1,2)  // result : [ '나', '다' ] / item : [ '가' ]

const item = "가나다라마"
const result = item.splice(1)    // 오류 TypeError: item.splice is not a function
const result= item.splice(2,4)   // 오류 TypeError: item.splice is not a function

 

 

2) 값을 기반으로 제거하는 경우 

// 값으로 삭제하는 것은 indexOf를 활용한 응용기법
// 실제 값을 넣어서 삭제하는 방법은 아니다.
const item = ["사과", "배", "바나나"]
const index = item.indexOf("바나나")

item.splice(index, 1) // 특정값을 삭제하니, 갯수는 1이다.
console.log(item)   // [ '사과', '배' ], 바나나가 삭제된 결과

 

· 배열안에 동일한 값을 한번에 모두 제거하는 방법

java의 stream처리와 비슷한 문법입니다. 뒤에 더 자세히 다루는 chapter가 있습니다.

const item = ["가", "나", "다", "가", "가", "라", "가"]
const result = item.filter( (item) => item !="가")
console.log(result) // [ '나', '다', '라' ]

 

 

 

· 특정 위치에 요소 추가하기

  형식 : 배열.splice(인덱서, 0, 추가요소)

splice의 두번째 요소는 삭제하는 갯수 deleteCount항목이다.!! 중요

// 아래 예시를 보면, 의도한대로 특정 배열에 넣기 위해서는 두번째 인자를 0을 사용해야 한다.
// 0을 넣으므로써, 삭제를 하지만 실제 삭제된것이 없는 것이다.
const item = ["가", "나", "다", "라", "마", "바", "사"]
item.splice(2, 0, "ADD_TEXT")   // [ '가', '나', 'ADD_TEXT', '다', '라', '마', '바', '사' ]
item.splice(2, 2, "ADD_TEXT")   // [ '가', '나', 'ADD_TEXT', '마', '바', '사' ]. 2개의 항목 (다,라)가 삭제된 예시
item.splice(2, 3)   // [ '가', '나', '바', '사' ], 3개의 항목, (다,라,마) 가 삭제된 경우
item.splice(2)   // [ '가', '나' ] , 삭제할 갯수를 지정하지 않으면, 마지막 항목까지 모두 삭제됨
console.log(item)

 

 

 

<반복문>

for문으로 구성된 다양한 방법이 있습니다.

· for in 반복문 / for of 반복문 / for 반복문

  보통은 for 반복문만 일반적으로 생각하는데, 다양한 방법을 알아둘 필요가 있습니다.

  반복문을 사용시. for in보다, for of / for반복문을 주로 사용하는 것이 더 좋습니다.

· for in 반복문

  index를 반환해서, 실제 값을 사용하기 위해서는 배열[키]를 통해서 사용해야 합니다.

  그래서 해당 배열에 문제가 있을때, 오류가 발생할수 있기 때문에 사용하기에 안정성이 떨이지는 부분이 있습니다.

const todos = ["가", "나", "다", "라", "마"]
for (const todosKey in todos) {
    console.log(`${todosKey}번째 글자는 ${todos[todosKey]}`)
}

console.log("--------------------------")

for (let todosKey in todos) {
    console.log(`${todosKey}번째 글자는 ${todos[todosKey]}`)
}

/* 결과
0번째 글자는 가
1번째 글자는 나
2번째 글자는 다
3번째 글자는 라
4번째 글자는 마
--------------------------
0번째 글자는 가
1번째 글자는 나
2번째 글자는 다
3번째 글자는 라
4번째 글자는 마

*/

 

 

· for of 반복문

 배열과 같은 경우, 바로 값을 사용할때 for of 를 사용하면 좋다.

// 반복변수에 요소의 값이 바로 들어가서, 바로 사용가능합니다.
const todos = ["가", "나", "다", "라", "마"]
for (const todo of todos) {
    console.log(`배열안에 값=${todo}`)
}

 

· for 반복문

가장 일반적인 횟수만큼 반복을 한다.

이 부분이 조금 이해가 가지 않는다. for~in방식을 사용해도 index를 통해서 값을 호출해서 사용하는데, 어떠한 부분이 더 위험하다고 책에서 설명하는지 조금 더 알아봐야 할것 같다.

const todos = ["가", "나", "다", "라", "마"]
for (let i = 0; i < todos.length; i++) {
    console.log(`index=${i}이고, 값은 ${todos[i]}`)
}

 

· while문

    // while문에 조건으로 confirm을 사용할수 있따.
    let i = 0;
    while (confirm("계속 진행할까요?")){
        alert(`${i}번째 반복입니다.`)
        i = i + 1;
    }

· break : for, while, switch등 반복문을 벗어날때 사용하는 키워드

· continue : 반복문안의 반복 작업을 멈추고, 반복문의 처음으로 돌아가 다음 반복작업을 진행

 

 

■ 기본미션

· 비파괴적 처리와 파괴적 처리의 의미와 장단점 설명하기

· 정의

1. 비파괴적 처리 : 원본이 변경되지 않는다

2. 파괴적 처리 : 원본이 변경된다.

3. 동작요소 : 자료처리연산자, 함수, 메소드 

위에서 예시를 든 slice, splice을 통해서 원본이 변경되는경우, 안되는 경우를 확인했다.

· 이렇게 구분지은 이유는, 즉 원본 데이터를 수정하는지 수정안하는 방법을 택하는지는 메모리 영역을 효율적으로 관리, 사용하기 위함입니다. 최근에는 메모리의 공간이 예전보다 충분하기 때문에 프로그램 적으로 "비파괴적인 처리"를 많이 사용합니다.

 

 

■ 선택미션

// case1 : 비파괴적(원본 유지)
// 문자열형태
const strA = "사과,배,바나나,귤"
const strATmp = strA.split(",")
console.log(strATmp)    // [ '사과', '배', '바나나', '귤' ]
console.log(strA)       // 사과,배,바나나,귤
console.log("--------------------------")


// case2 : 파괴적(원본이 변경됨)
// 배열
const arrayB = ["사과", "배", "바나나", "귤"]
const arrayBTmp = arrayB.push("감")
console.log(arrayBTmp)  // 5
console.log(arrayB)     // [ '사과', '배', '바나나', '귤', '감' ]
console.log("--------------------------")


// case3 : 비파괴적(원본 유지)
const arrayC = [1,2,3,4,5]
const arrayCTmp = arrayC.map((x) => x*x)
console.log(arrayCTmp)      // [ 1, 4, 9, 16, 25 ]
console.log(arrayC)         // [ 1, 2, 3, 4, 5 ]
console.log("--------------------------")

// case4 : 비파괴적(원본 유지)
const strD = "여백이 포함된 메세지     "
const strDTmp = strD.trim();

console.log("[" + strDTmp + "]")    // [여백이 포함된 메세지]
console.log("[" + strD + "]")       // [여백이 포함된 메세지     ]

 

'study' 카테고리의 다른 글

혼공 JS 5주차  (0) 2023.07.04
혼공 JS 4주차  (0) 2023.07.04
혼공 JS 2주차  (0) 2023.07.04
혼공 JS 1주차  (0) 2023.07.04
혼공 분석 6주차  (0) 2022.12.28