배열[인덱스]
형식으로 접근한다.const numbers = [1, 2, 3, 4, 5]
numbers[0] = 1
numbers[3] = 4
배열.length
를 사용해서 배열의 길이를 확인할 수 있다.const fruits = ['배', '사과', '키위', '바나나']
fruits.length = 4
fruits[fruits.length-1] = "바나나"
fruits.length
의 경우, 배배열에 4개의 요소가 들어있기 때문에 4를 출력한다.fruits[fruits.length-1]
의 경우, length가 4였기 때문에, (4 - 1 = 3)이므로, 인덱스가 [ 3 ]인 "바나나"가 출력된다.배열.push(요소)
를 이용해서 배열 뒷부분에 요소를 추가할 수 있다.
예시:
const fruits = ['배', '사과', '키위', '바나나']
fruits = (4) ['배', '사과', '키위', '바나나']
fruits.push('수박') = 5
fruits = (4) ['배', '사과', '키위', '바나나', '수박']
인덱스 번호로도 배열 뒷부분에 요소를 추가할 수 있다.
예시 1:
const fruits = ['배', '사과', '키위', '바나나']
fruits[10] = '귤'
fruits = (11) ['배', '사과', '키위', '바나나', empty x 6, '귤' ]
예시 2:
const fruits = ['배', '사과', '키위', '바나나']
fruits[fruits.length] = '귤'
fruits = (5) ['배', '사과', '키위', '바나나', '귤' ]
.length
의 경우, 배열의 끝번째 인덱스를 의미 하기 때문에, 추가하고자 하는 요소의 인덱스를 표현할 수 있는 방법은 여러가지가 있다.배열.splice(인덱스, 0, 요소)
방식을 이용해서 배열의 특정 위치에 요소를 추가하는 방식도 있다.
예시:
const fruits = ['배', '사과', '키위', '바나나']
fruits.splice(1,0,'오렌지') = [ ]
fruits = (5) ['배', '오렌지', '사과', '키위', '바나나' ]
.splice
의 경우, 매개변수가 3개가 있는데, 그 중 두번째 매개변수의 값을 "0"으로 설정하면 배열에서 어떤 요소도 삭제되지 않는다.배열.splice(인덱스, 제거할 요소의 개수)
를 이용해서 인덱스를 기반으로 요소를 제거할 수 있다.
예시:
const fruits = ['배', '사과', '키위', '바나나']
fruits.splice(2,1) = ['키워'] //리턴 시 제거되는 요소 출력
fruits = (3) ['배', '사과', '바나나' ]
.splice
의 경우, 매개변수를 2개만 사용할 수도 있는데, 이때 특정 인덱스로부터 n개의 요소를 제거할 수 있다. const 인덱스 = 배열.indexOf(요소)
메소드를 이용해서 값의 위치를 추출하고, splice()
메소드를 이용해서 특정 요소를 제거할 수 있다.
예시:
const fruits = ['배', '사과', '키위', '바나나']
const index = fruits.indexOf('바나나')
index = 3
fruits.splice(index, 1)
fruits = ['배', '사과', '키위']
"index" 라는 상수를 선언할 때 이 상수의 값을 제거하고자 하는 요소의 인덱스로 지정한다.
이때 해당 요소의 인덱스가 출력된다.
그리고 splice()
를 이용해서 첫번째 매개변수에 제거하고자 하는 요소의 인덱스를 지정하고, 두번째 매개변수에 제거할 요소의 개수를 지정한다.
문자열에도 indexOf()
를 사용할 수 있다.
const stringA = ['동해물과 백두산이 마르고 닳도록']
stringA.indexOf('백두산') = 5
자바스크립트의 연산자, 함수, 메소드 등으로 자료를 처리했을 때 결과물에 따라 자료 처리를 비파괴적 처리와, 파괴적 처리로 구분할 수 있다.
array의 값이 push, splice 등으로 요소가 추가/제거 되는 것은 파괴적 처리로 구분된다.
const todos = ['반복문 끝내기', '함수 끝내기', '내일은 챕터 8까지 끝내기']
for (const i in todos){
console.log(`${i}번째 할 일: ${todos[i]}`)
}
const todos = ['반복문 끝내기', '함수 끝내기', '내일은 챕터 8까지 끝내기']
for (const todo of todos){
console.log(`오늘의 할 일: ${todo}`)
}
switch 조건문이나 반복문을 벗어날 때 사용하는 키워드다.
while 반복문은 조건이 항상 "참"이다.
반복문의 조건이 "참"일 경우 끝나지 않는 무한 루프에 빠지기 때문에 Break 키워드를 사용해야 반복문을 중단할 수 있다.
예시:
for (let i =0; true; i++){
alert(i + '번째 반복문입니다.')
const isContinue = confirm('계속 하시겠습니까?')
if (!isContinue) {
break
}
}
alert('프로그램 종료')
if(!isContinue)
를 추가해서 confirm 창에서 [CANCEL] 버튼 클릭 시 Break 키워드를 만나기 때문에 "프로그램 종료"라는 마지막 알림창을 만날 수 있다.예시:
let output = 0
for (let i = 1; i<=10; i++){
if (i%2 === 1){
continue
alert('홀수입니다.')
}
output += i
}
alert(output)
홀수입니다
라는 알림창이 생성되어야 한다.[새로운 output] = ([기존output] +i)
n-차원 배열
이라고 한다.let output = ''
for (let i = 1; i <10; i++){
for(let j = 0; j <i; j++) {
output += '*'
}
output += '\n'
}
console.log(output)
output이라는 변수를 선언. 해당 변수는 값이 없다. (빈문자열)
반복변수 "i"가 1일 때, "i"가 10보다 작을때까지만 "i"의 값이 하나씩 증가하며 반복문이 실행된다.
2번의 조건이 "참"일 때, 두번째 반복문이 시작된다.
반복변수 "j"가 0일 때, "j"의 값이 "i"보자 작을때까지만 "j"의 값이 하나씩 증가하며 반복문이 실행된다.
4번의 조건이 "참"일 때, 비어있던 변수 output에 '*'이 더하기할당 된다.
변수 output에 '*'이 더하기할당 되면, 그 다음으로 해당 변수에 줄바꿈이 추가된다.
줄바꿈까지 추가되면 다시 첫번째 반복문부터 재실행된다.
상세해석:
i = 1
, j = 0
일때, '*'
은 1개가 생성되고, 줄바꿈이 일어난다.
output에 더하기할당이 되었기 때문에, output의 값은 '*'
이 되었다.
반복문 재실행 시, i = 2
, j = 1
이 되고, 첫번째 반복문을 통해 output의 값이 '*'
이 되고, 두번째 반복문이 실행될 때 output의 값은 더하기 할당으로 인해, 줄바꿈 + '**'
이 된다.
세번째 반복문 실행 시 i = 3
, j = 2
이 되고, (여전히 조건은 "참") 두번째 반복문과 더하기할당을 통해 output의 값이 줄바꿈 + '**'
이 되어있기 때문에 세번째 반복문에서 출력되는 값은 '***'
이다.
이렇게 i < 10
이라는 조건이 "참"일때까지 반복되고 i = 1
부터 시작했기 때문에,
*
**
***
****
*****
******
*******
********
*********
이런 형태의 피라미드가 생성된다.
let output = ''
for (let i = 1; i < 5; i++){
for(let j = 5; j > i; j--) {
output += ' '
}
for(let k = 0; k < 2 * i-1; k++){
output += '*'
}
output += '\n'
}
console.log(output)
output이라는 값이 비어있는 변수를 선언 (공백)
반복변수 "i"가 1일 때, "i"의 값이 5보다 작을때까지만 "i"의 값이 하나씩 증가한다.
첫번째 반복문이 "참"일 경우, 두번째 반복문이 실행된다.
반복변수 "j"가 5일 때, "j"의 값이 "i"의 값보다 클때까지만 "j"의 값이 1씩 작아지는 반복문 실행
두번째 반복문이 "참"일 경우, 변수 output에 띄어쓰기 "
"가 더하기할당된다.
그 다음, 세번째 반복문이 실행되는데, 반복변수 "k"가 0일때, "k"의 값이 2(i-1)보다 작을때까지 "k"가 하나씩 증가한다.
6번의 조건이 "참"일 경우, output의 값에 '*'이 1개 더하기할당된다.
모든 반복문이 최종적으로 돌고나면 변수 output에 줄바꿈(\n)이 더하기할당되고, 반복문들의 조건이 "거짓"이 될때까지 반복문이 실행된다.
상세해석:
i = 1
, j =5
, 일때, 변수 output에 띄어쓰기가 추가되어 값은 "
"이 되어있는 상태다.
이때 반복문(k)가 실행되고, k = 0
일때, k < (2*i)-1
의 조건이 k < 2-1
임으로, "k"의 값이 하나 증가된다.
반복문(k)의 결과로 "
"이 되어있는 상태의 변수 output에 *
이 더하기할당되어 " *
"이 되고, 반복문들의 최종 결과값으로 줄바꿈이 일어난다.
그 다음, 두번째 반복문이 실행된다.
i = 2
, j = 5
일때, 변수 output의 띄어쓰기가 더하기할당되어 값이 " *
"이 된다. (띄어쓰기 2번 들어감)
그리고 다시 반복문(k)가 실행되고, k = 1
일 때, k < (2*i)-1
의 조건이 k < 4-1
임으로, "k"의 값이 하나 증가된다.
그리고 이번 반목문(k)의 결과로 " *
"이었던 변수 output의 값이 " **
"로 변하고, 반복문들의 최종 결과값으로 줄바꿈이 또 일어난다.
이렇게 모든 반복문이 i < 5
인 조건이 "참"일때까지 반복되기 때문에 최종 결과는
*
***
*****
*******
이런 형태의 결과물이 생성된다. "i"가 5보다 작을때까지 진행되고 "i"는 1부터 시작했기 때문에, 총 4줄의 피라미드가 생성된다.
아... 중간에 break랑 continue 키워드 정리했던 부분 날아가서 다시 작성하느라 오래 걸렸다...
저장을 생활화 하자고 배웠다..
그리고 중첩반복문은 미쳤다... 절대로 지금 혼자 생각 할 수 없다...
ㅎ....
출처: 혼자 공부하는 자바스크립트 (한빛미디어)