안녕하새우🍤 벌써 혼공학습단 3주차라니,, 시간이 참 빠른 것 같아요. 2025년의 첫 달도 정신없이 지나가고 있어요. 요즘은 하루하루 흘러가는 게 너무 아까워요. 할 일하고 이제 좀 놀아볼까,,,? 하면 잘 시간이라닝 조금 더 효율적으로 살아야 될 것 같아용.
다들 연 초에 세운 목표 잘 지켜나가고 계신가용? 저는 계란말이로 시작했지만 스크램블이 되는 저의 요리같은 삶을 살고 있답니다.. 호호 그래도 같은 달걀이니까 괜찮아용. 그럼 다들 이번주도 화이팅하새우❗
✅ 진도: chater 04
✅ 기본숙제(필수): 비파괴적 처리와 파괴적 처리의 의미와 장단점 설명하기
✅ 추가 숙제(선택): p. 173 확인문제 3번 문제 풀고, 풀이 과정 설명하기
const 배열명 = [요소, 요소, ... ,요소]
<script>
const array = [273, 'string', true, function( ) { }, {}, [273, 103]]
//배열 안에 숫자, 문자열, boolean, 함수, 다른 배열,, 등을 넣을 수 있음.
</script>
인덱스
활용배열 [인덱스]
<script>
const numbers = [273, 52, 103, 32]
</script>
> numbers[0] //콘솔입력
273//출력
> numbers[1+1]
103
length
속성 사용배열.length
<script> const fruits = ['배', '사과', '키위', '바나나'] </script> fruits.length //콘솔 입력 4 //콘솔 출력 fruits[fruits.length - 1] '바나나'
push()
메소드배열.push(요소)
<script>
const todos = ['혼공단', '동아리', '프젝', '정처기']
</script>
> todos.push('중국어 공부') //콘솔 입력
5 //push()메소드로 요소가 추가된 후의 요소 개수 출력됨.
인덱스
사용<script>
const apple = ['ipone', 'ipad', 'appleWatch']
</script>
> apple[apple.length] = 'airpod'//배열의 마지막 위치에 추가
> apple[10] = 'ipod' //특정 인덱스에 추가, apple[4]~[9]: empty
..
🤔 배열.push()를 배우면서 두가지 궁금증이 생겨서 찾아봤새우
(제 정보가 틀렸다면,, 댓글 부탁함미다.)
스택의 push
와 배열의 push
는 같은 건가,,?
=> push()의 기능 자체는 동일하지만 스택과 배열에 차이점이 있음
- 스택은 LIFO 규칙을 따르는 데이터를 관리하는 자료 구조
- 배열은 일반적인 데이터를 관리하는 자료구조
=> 배열이 더 넓은 범위의 개념
const
는 상수를 선언할 때 사용하는 명령어인데 const로 선언한 배열에 요소를 추가할 수 있는 이유가 무엇일까?
=> const
: 변수 자체의 변경은 제한하지만, 객체 내부 요소의 변경은 허용함.(객체의 속성이나 요소 변경 허용)
=> const
: 배열이 저장된 메모리 주소(참조)의 변경 막음. but, 내부 요소 변경 허용//주소 내의 값 변경은 허용함.
..
splice()
: 접합 // 특정 인덱스부터 n개의 요소를 제거한 후 합침.배열.splice(인덱스, 제거할 요소의 개수)
<script>
const apple = ['ipone', 'ipad', 'appleWatch']
apple.splice(1,1)//'ipad'제거: 배열의 1번째 인덱스로부터 1개 요소를 제거
</script>
indexOf
: 배열 내부의 특정 값의 위치를 찾음, 요소가 있을 경우 인덱스를 리턴하고 없을 경우 '-1' 리턴> const 인덱스 = 배열.indexOf(요소)
> 배열.splice(인덱스, 1)
<script>
const apple = ['ipone', 'ipad', 'appleWatch']
const index = apple.indexOf('ipad')//'ipad'의 인덱스: 1
apple.splice(index, 1)//'ipad'제거: 배열의 1번째 인덱스로부터 1개 요소를 제거
apple.indexOf('ipad')//-1 출력(ipad가 없으니까.)
</script>
+ 특정 문자열에서도 indexOf()
메소드 사용 가능.
<script>
const apple = '원숭이 엉덩이는 빨개 빨가면 사과 사과는 맛있어'
apple.indexOf('빨개')//9 출력, 띄어쓰기 주의
</script>
filter()
메소드 사용<script>
const apple = ['원숭이', '엉덩이는', '빨개', '빨가면', '사과', '사과', '맛있어']
apple.filter((item)=> item !== '사과' )
// 출력: (5) ['원숭이', '엉덩이는', '빨개', '빨가면', '맛있어']
</script>
+ 콜백함수: 다른 함수의 인자로 전달되어 실행되는 함수
\- filter()가 배열의 각 요소를 순회하며 콜백함수 실행
\- 콜백 함수가 true를 반환하는 요소만 새로운 배열에 포함
\- filter()는 원본 배열의 변경이 아닌 새로운 배열의 반환임.
배열.splice.(인덱스, 0, 요소)
// 0: 아무것도 제거하지 않음, 요소: 추가하고 싶은 요소 입력
<script>
const apple = ['원숭이', '엉덩이는', '빨가면', '사과', '사과', '맛있어']
apple.splice(2, 0, '빨개') //2번째 인덱스에 빨개 추가
</script>
🌟splice()가 접합이라는 점을 잘 활용하기.
✅ 기본숙제(필수): 비파괴적 처리와 파괴적 처리의 의미와 장단점 설명하기
비파괴적 처리 | 파괴적 처리 | |
---|---|---|
정의 | 처리 후 원본 내용이 변경되지 않음. | 처리 후 원본 내용이 변경됨. |
장점 | 원본을 보존할 수 있음. | 메모리를 절약할 수 있음. |
단점 | 메모리 부족 문제가 생김. | 자료 보호가 어려움. |
예시 | '+'연산자를 사용해 문자열 a, b 연결한 문자열 c | array.push() |
✅ 추가 숙제(선택): p. 173 확인문제 3번 문제 풀고, 풀이 과정 설명하기
1
) [파괴적 처리 / 비파괴적 처리]
> const strA = "사과, 배, 바나나, 귤"
undefined
> strA.split(",")
(4) ["사과", "배", "바나나", "귤" ]
> strA
"사과, 배, 바나나, 귤"
2
) [ 파괴적 처리 / 비파괴적 처리]
> const arrayB = ["사과", "배", "바나나", "귤" ]
undefined
> arrayB.push("감")
5
> arrayB
(5)["사과", "배", "바나나", "귤", "감"]
3
) [파괴적 처리 / 비파괴적 처리]
> const arrayC = [1, 2, 3, 4, 5]
undefined
> arrayC.map((x) => x * x)
(5) [1, 4, 9, 16, 25]
> arrayC
(5) [1, 2, 3, 4, 5]
4
) [파괴적 처리 / 비파괴적 처리]
> const strD = " 여백이 포함된 메시지 "
undefined
> strD.trim()
"여백이 포함된 메시지"
>strD
" 여백이 포함된 메시지 "
for ( const 반복 변수 in 배열 또는 객체 ) {
문장
}
<script>
const todos = ['혼공', '중국어', '운동']
for (const i in todos) {
console.log(`${i}번째 할 일: ${todos[i]}`)
}
</script>
//출력
0번째 할 일: 혼공
1번째 할 일: 중국어
2번째 할 일: 운동
+ for in 보단 for of나 for이 더 안정적임.
for ( const 반복 변수 of 배열 또는 객체 ) {
문장
}
<script>
const todos = ['혼공', '중국어', '운동']
undefined
for (const todo of todos) {
console.log(`오늘의 할일: ${todo}`)
}
</script>
//출력
오늘의 할일: 혼공
오늘의 할일: 중국어
오늘의 할일: 운동
..
🤔 위의 예제에서 인덱스와 값 모두 출력하는 방법은 없을까?
(ex. 오늘의 할일: 1.운동) / 참고로 gpt한테 물어본거라 오류가 있다면 댓글 부탁드립니당,,
1) entries()
메소드 사용
[인덱스, 값]
형태의 배열을 반환해, 인덱스와 값 모두 받을 수 있음.<script>
const todos = ['혼공', '중국어', '운동'];
for (const [index, todo] of todos.entries()) {
console.log(`오늘의 할일: ${index + 1}. ${todo}`);
}
</script>
2) forEach
활용
<script>
todos.forEach((todo, index) => {
console.log(`오늘의 할일: ${index + 1}. ${todo}`);
});
</script>
..
for (
let
i = 0; i < 반복 횟수; i++){
문장
}
<script>
for (let i=0; i<3; i++){//0이상 3미만이면 반복
console.log(`${i}번째 반복입니다.`)
}
</script>
//출력
0번째 반복입니다.
1번째 반복입니다.
2번째 반복입니다.
..
🤔for in, for of와 달리 for 반복문이 반복 변수를 let으로 선언하는 이유는?
<script>
const todos = ['혼공', '중국어', '운동']
for(let i=0; i < todos.length; i++){
console.log(`${i}번째 할 일: ${todos[i]}`)}
</script>
//출력
0번째 할 일: 혼공
1번째 할 일: 중국어
2번째 할 일: 운동
while (불 표현식){
문장
}
<script>
while(confirm("계속 진행하시겠새우?")){
//사용자가 [확인]버튼을 클릭하면 true가 되어 계속 반복
alert(`${i}번째 반복입니다.`)
i++
}
</script>
//결과
confirm창의 확인을 누를 때마다 alert창의 숫자가 올라가며 반복됨.
<script>
let i = 0
const array = [1,2,3,4,5]
while (i < array.length) {
console.log(`${i}번째 요소: ${array[i]}`)
i++
}
</script>
//출력
0번째 요소: 1
1번째 요소: 2
2번째 요소: 3
3번째 요소: 4
4번째 요소: 5
while(true) {
}break
<script>
for (let i=0; true; i++){
alert(i+'번째 반복문입니다.')
//진행 여부 물어봄
const isContinue = confirm('계속 하시겠새우?')
if(!isContinue) {
break
}
}
//취소를 누르면 반복이 끝나며 프로그램 종료 뜸.
alert('프로그램 종료')
</script>
<script>
let output = 0
for(let i=0; i<=10; i++){
if(i%2===1){
continue
}
output+=1
}
alert(output)
</script>
//출력
6
<script>
for(i=0; i<10; i++){
for(j=0; j<i; j++){
output += "*"
}
output += "\n"
}
console.log(output)
</script>
//출력
*
**
***
****
*****
******
*******
********
*********