문제
아래 조건을 만족하는 함수 sumInput()을 작성해 봅시다.
- prompt 창을 띄워 사용자에게 숫자를 입력해 달라고 요청한 후, 입력받은 값들을 배열에 저장합니다.
- 숫자가 아닌 값, 혹은 빈 문자열을 입력하거나 'Cancel' 버튼을 누르면 질문을 멈춥니다.
- 배열 요소의 합을 계산하고 리턴합니다.
- 주의: 숫자 0은 유효한 숫자이므로, 사용자가 0을 입력하더라도 질문이 멈추지 말아야 합니다.
나의 풀이
- prompt 창으로 숫자를 입력받아, 값들을 배열에 저장
- 숫자가 아닌 값 / 빈 문자열 (
''
) / cancle 버튼 (null) 을 입력 시 질문이 멈춤 ('0' 입력시 멈추면 안됨) - 배열 요소의 합을 계산하고 리턴
function sumInput() {
let array = [];
let value = +prompt("숫자를 입력하세요", "");
while (!isNaN(value)) {
array.push(value);
value = +prompt("숫자를 입력하세요", "");
}
let sum;
for (let i = 0; i < array.length; i++) {
sum += array[i];
}
return sum;
}
alert(sumInput());
역시나 정상적으로 작동하지 않는다.
- 문제점
- isNaN 으로 숫자형을 검사하면 걸러내지 못하는 부분이 있다.
그러므로 빈 문자열 (''
) / cancle 버튼 (null) 시, 계속 질문을 받게 된다.isNaN("")
⇒ falseisNaN(null)
⇒ falseisNaN(undefined)
⇒ true
- sum의 선언값이 존재하지 않아
let sum = undefined
와 같다.
->undefined + 숫자
는NaN
이 되어 문제가 발생
∴ sum값을 0으로 선언해야한다. - value를 입력 받는 코드가 두 번 반복
- isNaN 으로 숫자형을 검사하면 걸러내지 못하는 부분이 있다.
해답
function sumInput() {
let numbers = [];
while (true) {
let value = prompt("숫자를 입력해 주세요.", 0);
// 입력받는 것을 정지해야 하는 경우
if (value === "" || value === null || !isFinite(value)) break;
numbers.push(+value);
}
let sum = 0;
for (let number of numbers) {
sum += number;
}
return sum;
}
alert( sumInput() );
- while 반복문 안에서 value를 입력받으면서 두 줄 코드를 한 줄로 줄임
- 조건문을 빠져나가는 경우가 특수하고 제한되어 있다면 ,break를 쓰는 것이 깔끔함
- 배열의 값을 순회하는 코드는 for...of문을 써서 간결하게 표현
참고
https://ko.javascript.info/array
'Programming > Client' 카테고리의 다른 글
[Javascript] 확장 가능한 계산기 만들기 (생성자 함수) (0) | 2022.03.23 |
---|---|
[Javascript] 배열 메소드를 이용한 함수 만들기 (0) | 2022.03.21 |
[Javascript] 문자열 줄이기 함수 (0) | 2022.03.16 |
[Javascript] 특정 문자 걸러내는 함수 만들기 (0) | 2022.03.16 |
[Javascript] 문자열의 첫글자만 대문자로 변경 후, 출력 (0) | 2022.03.16 |