Set함수와 do...while문
오늘은 간단하면서 익숙하지 않던? 함수를 알아보도록 하겠다
며 칠전 프로그래머스에서 알고리즘 문제를 3시간 정도 걸려서 푼 문제를
아주 간단하게 풀어낸 분의 코드에서 Set()함수
의 용이함을 깨닫게 되어 이렇게 글로 쓰게 되었다.
이 함수를 이용하면 아주 쉽게 중복되는 요소를 삭제하고 고유한 값들만 남게 재구성 할 수 있다는 것이 가장 큰 장점
인 것 같다.
Set() 함수
자료형에 관계 없이 원시 값과 객체 값과 객체 참조 모두 유일한 값을 저장할 수 있다
let arrs = [1, 2, 3, 4, 2, 3, 1, 3]
var newArrs = [... new Set(arrs)]
console.log(newArrs)
[ 1, 2, 3, 4 ]
/* 모든 코드의 변수는 공유되고 있다 */
arrs = [1, 2, 3, 4, 2, 3, 1, 3]
let newSet = new Set(arrs)
let newArrs2 = Array.from(newSet)
console.log(newArrs2)
[ 1, 2, 3, 4 ]
위 와 같이 Set함수를 이용하면
reduce
같은 복잡한 매서드를 이용하지 않고도 아주 손쉽게 중복 요소를 제거 할 수 있다.Array.from
을 이용하여 배열로 바꿀 수 있다.
Set함수는 매개변수로 반복가능한 객체(iterable)을 받아 Set객체를 리턴한다
arrs = [1, 2, 3, 4]
let sets = new Set(arrs)
console.log(sets)
Set { 1, 2, 3, 4 }
sets.has(1) // 배열의 includes처럼 해당 요소를 찾고 boolean값을 반환한다
console.log(sets.has(1))
sets.size // 배열의 length 대신 size를 이용하여 길이를 알수있다
console.log(sets.size)
console.log(sets.delete(1))// 해당 요소를 삭제함 mutable(원본값이 변함)
sets.add(1) // 해당 요소를 추가한다
console.log(sets.add(1))
true
4
true
Set { 2, 3, 4, 1 }
이처럼 Set함수 값을 이용할때 사용되는 매서드는 일반적인 배열 매서드와 조금 다르므로 주의하자
do…while문
반복문에서 for문
이나 while문
은 자주 사용하지만 do...while문
은 나에겐 상대적으로 생소한 문법이었다.
우연히 발견한 페이지에서서 참고해 prompt
와 함께 사용해보니 이해하는데 유용해 보았다.
우선 while
문과 do...while
문의 가장 큰 차이점은 조건식이 실행되는 순서라고 한다.
let condition = false
while (condition) {
console.log("한 번도 실행되지 않는다")
}
do {
console.log("무조건 한번은 실행한다")
} while(condition)
무조건 한번은 실행한다
위 식을 보면 while문
은 do...while문
보다 조건식이 먼저 실행되는데 Falsy
한 값이기에 내부 코드가 실행되지 않지만
do...while
문은 내부 코드가 먼저 실행된 후에 조건식이 실행되기에 무조건 한번은 코드가 실행되는 특징이 있다
다음으로 prompt
를 이용하여 조건식이 충족하지 않다면 무한 loop
를 돌리는 예제를 알아보자
do {
var answer = parseInt(prompt("1 + 1 = ?"))
if(answer !== 2) console.log("입력 : ", answer, " 오답 입니다!")
} while (answer !== 2)
console.log("입력 : ", answer, " 정답 입니다!")
위 식에서 유의할점은 scope
규칙에 의해 do 내부의 변수 answer
을 선언할때 let
이 아닌 var
를 써야 한다는 점이다.
그리고 prompt
는 입력받은 문자열
을 반환하고 아무것도 입력하지 않는다면 빈 문자열
, 취소를 누르면 null
을 반환한다
위에서 조건식이 숫자와 비교하므로 문자열을 숫자로 바꾸는 작업
이 필요하다