https://learnjs.vlpt.us/basics/08-loop.html
아래와 같이 조건을 주면 맨 처음 i 값이 0 이므로 numbers[i] 는 1 이 된다. 그러므로 numbers[i] > 3 이 거짓이 된다. 그러므로 while 문 내부는 실행되지 않는다.
function biggerThanThree(numbers) {
const filteredNumbers = []
let i = 0
while(i < numbers.length && numbers[i] > 3){
filteredNumbers[i] = numbers[i]
i++
}
return filteredNumbers
}
const numbers = [1, 2, 3, 4, 5, 6, 7];
console.log(biggerThanThree(numbers)); // [4, 5, 6, 7]
아래와 같이 하면 i 값이 배열의 길이보다 크면 반복문을 빠져나온다. 즉, i 값이 증가하지만 배열의 원소를 조회할때까지만 반복문이 실행된다.
function biggerThanThree(numbers) {
const filteredNumbers = []
let i = 0
while(i < numbers.length){
if(numbers[i] > 3){
filteredNumbers[i] = numbers[i]
}
i++
}
return filteredNumbers
}
const numbers = [1, 2, 3, 4, 5, 6, 7];
console.log(biggerThanThree(numbers)); // [4, 5, 6, 7]
아래와 같이 하면 제대로 된 결과를 출력한다. 해당 코드에서 j 는 새로운 배열에 값을 저장하기 위한 인덱스값이고 i 는 원본배열의 값을 조회하기 위한 인덱스이다. 만약 j 없이 i 만 사용해서 filteredNumbers[i] 라고 실행하면 i 값이 3 이상일때만 새로운 배열에 저장되므로 i 값이 3보다 작을때 filteredNumbers 배열의 값은 비어있게 된다.
function biggerThanThree(numbers) {
const filteredNumbers = []
let i = 0, j = 0
while(i < numbers.length){
if(numbers[i] > 3){
filteredNumbers[j] = numbers[i]
j++
}
i++
}
return filteredNumbers
}
const numbers = [1, 2, 3, 4, 5, 6, 7];
console.log(biggerThanThree(numbers)); // [4, 5, 6, 7]
for 문을 사용하면 아래와 같이 작성할 수 있다.
function biggerThanThree(numbers) {
const filteredNumbers = []
for(let number of numbers){
if(number > 3){
filteredNumbers.push(number)
}
}
return filteredNumbers
}
const numbers = [1, 2, 3, 4, 5, 6, 7];
console.log(biggerThanThree(numbers)); // [4, 5, 6, 7]
function biggerThanThree(numbers) {
/* 구현해보세요 */
const filteredNumbers = []
let i = 0
for(let number of numbers){
if(number > 3){
filteredNumbers[i] = number
i++
}
}
return filteredNumbers
}
const numbers = [1, 2, 3, 4, 5, 6, 7];
console.log(biggerThanThree(numbers)); // [4, 5, 6, 7]
https://ko.javascript.info/while-for
우선 사용자가 100보다 작은 수를 입력하면 반복적으로 프롬프트 창을 띄워야 하므로 반복문을 사용해야 한다. 하지만 사용자가 100보다 작은 수를 몇번 입력하는지 알 수 없기 때문에 반복횟수가 정해져 있는 for 문을 사용하기 힘들다. 그래서 while 문을 사용하고 있다. 또한, prompt 로 입력받은 값은 문자열 형태이기 때문에 숫자로 변환해주어야 한다.
빈 문자열을 입력하거나 100보다 큰 수를 입력하면 프롬프트 창을 띄우지 않는다. 반대로 생각하면 빈 문자열을 입력하지 않고 동시에 100보다 작은 값을 입력하면 반복해서 프롬프트 창을 띄워주면 된다. 집합의 개념을 빌리면 A 집합이 빈 문자열을 입력한 경우라고 하고, B 집합이 100보다 큰 수를 입력한 경우라고 한다면 이 두개의 집합의 합집합 A U B 의 여집합이다. 즉, 둘다 아닌 경우이다. 또한, prompt 로 입력받은 값은 문자열 형태이므로 비교를 위하여 숫자 형태로 변환해준다.
let inputValue = Number(prompt('100보다 큰 값을 입력하세요 '))
while(inputValue && inputValue <= 100){
inputValue = Number(prompt('100보다 큰 값을 입력하세요 '))
}
빈 문자열을 입력하지 않은 경우는 값이 존재한다는 의미이므로 사용자가 입력한 값 그대로 검사해주면 된다. 사용자가 입력한 값이 있으면 inputValue 는 Truthy 이므로 값이 존재한다. 하지만 사용자가 값을 입력하지 않으면 inputValue 는 falsy 이므로 더이상 프롬프트 창은 나오지 않는다.
아래와 같이 parseInt 나 플러스 기호(+)를 사용해도 문자열이 숫자로 형변환된다.
let inputValue = parseInt(prompt('100보다 큰 값을 입력하세요 '))
while(inputValue && inputValue <= 100){
inputValue = parseInt(prompt('100보다 큰 값을 입력하세요 '))
}
let inputValue = +prompt('100보다 큰 값을 입력하세요 ')
while(inputValue && inputValue <= 100){
inputValue = +parseInt(prompt('100보다 큰 값을 입력하세요 '))
}
아래와 같이 블록 안에서 const, let 을 이용하여 사용자가 입력한 값(inputValue)를 재정의하게 되면 블록을 벗어나면서 사라진다. 즉, 사용자가 입력한 최신값으로 업데이트가 되지 않는다. 결과적으로 while 문 밖에서 사용자가 처음에 입력한 inputValue 값을 계속 읽어오기 때문에 만약 처음에 100보다 작은 값을 입력해서 while 문 안에 들어왔다면 더이상 빠져나가지 못하고 무한루프에 빠진다.
const inputValue = Number(prompt('100보다 큰 값을 입력하세요 '))
while(inputValue && inputValue <= 100){
const inputValue = Number(prompt('100보다 큰 값을 입력하세요 '))
}
let inputValue = Number(prompt('100보다 큰 값을 입력하세요 '))
while(inputValue && inputValue <= 100){
let inputValue = Number(prompt('100보다 큰 값을 입력하세요 '))
}
let inputValue = Number(prompt('100보다 큰 값을 입력해주세요'))
console.log(inputValue)
while(inputValue !== 0
&& inputValue < 100){
inputValue = Number(prompt('100보다 큰 값을 입력해주세요'))
}
'프론트엔드 > Javascript 연습과제 해답' 카테고리의 다른 글
반복문(최신) 연습과제 해답 (0) | 2024.02.17 |
---|---|
조건문 연습과제 해답 (0) | 2024.02.17 |
자바스크립트 문법 13 - 함수(function)의 활용 해답 (0) | 2022.01.26 |
자바스크립트 문법 12 - 함수(function)의 기본 해답 (0) | 2022.01.26 |
자바스크립트 문법 11 - 객체(Object) 해답 (0) | 2022.01.16 |