2주차 강의
구조분해할당
let user = {
name : 'nbc',
age : 30
}
let { name : newName, age : newAge } = user
console.log(newName)
console.log(newAge)
console.log(user)
구조분해할당 후에 콘솔로 찍어 볼 때
console.log(name)은 'name is not defined'으로 오류가 발생함
그래서 구조분해할당 후 console.log(user)를 하면
결과는 위에 첨부한 사진처럼 newName : 'nbc'가 아닌 name: 'nbc'로 확인됨
왜지...?
객체로부터 속성을 해체하여 객체의 원래 속성명과는 다른 이름의 변수에 할당할 수 있습니다.
해당 설명에 따르면,
아무래도 이미 다른 이름의 변수에 할당이 된 후라 console.log(user)은 오류가 나는 것인 것 같고...
console.log(user)의 값이 {name: 'nbc', age: 30}으로 확인되는 것은
user라는 오브젝트 자체를 변경한 것은 아니기 때문에 newName, newAge로 출력이 되지 않는 것 같다...
아직 구조분해할당에 대해 이해가 깊지 못해서
이해한 내용이 맞는지 확인은 다시 한번 해봐야 겠다...!
구조 분해 할당 - JavaScript | MDN
구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식입니다.
developer.mozilla.org
1주차 숙제
프로그래머스 문자열 내 p와 y의 개수
- 문제 :
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
- 풀이 :
대문자와 소문자를 구별하지 않는다는 조건이 있기 때문에,
toUpperCase() 혹은 toLowerCase()를 사용하여 문자열을 대문자나 소문자의 형태 한가지로 변환해야 하는 것이 제일 첫번째 순서라고 생각함
1. toUpperCase() 로 문자열을 전부 대문자로 변경
2. 문자열을 하나하나씩 살펴봐야 하므로 for문 사용
3. p와 y의 개수 확인 후 비교
4. 조건문을 사용해 상황에 맞는 결과값 return
풀이 방법은 이렇게 생각은 떠올렸지만..!
'3. p와 y의 개수 확인 후 비교' 도대체 이 부분은 어떻게 해결해야 하는지 감도 잡히지 않음
var num = 0;
for(var i = 0; i < s.length; i++){
if(s[i] === 'P') num++; // p이면 갯수 더하기
if(s[i] === 'Y') num--; // y이면 갯수 빼기
}
풀이를 확인해 본 결과...
num이라는 변수를 하나 선언해서 거기에 카운트를 하면 되는 것이었다...
문제 해결을 직접 하진 못했지만,
++ 와 -- 로 카운트를 하면 편하다는 점을 새롭게 알게 되었다
프로그래머스 음양 더하기 - 자바스크립트
- 문제 :
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
- 풀이 :
1. 배열들의 합을 구하기 전에 부호를 먼저 붙여줘야 하므로 for문을 사용
2. 정수 배열과 부호 배열의 길이가 같으므로, for문 안에서 조건문을 사용하여 signs가 true인 경우와 아닌 경우로 나누기
3. signs의 값에 따라 true이면 answer에 absolutes값을 += , flase이면 answer에 absolutes값을 -=
function solution(absolutes, signs) {
var answer = 0;
for (let i=0; i<absolutes.length; i++) {
if (signs[i] === true) {
answer += absolutes[i]
} else {
answer -= absolutes[i]
}
}
return answer;
}
한번에 결과 값을 얻을 수 있었다..!
다른 사람의 풀이
function solution(absolutes, signs) {
let answer = 0;
for (let i = 0; i < absolutes.length; i++) {
signs[i] ? answer += absolutes[i] : answer -= absolutes[i]
}
return answer;
}
내가 생각한 풀이 과정과 같은 방식이지만,
3항 연산자를 사용해서 더 간결하게 표현할 수 있는 방법이 있음을 알게 되었다...!
조건문이 좀 더 익숙해 진 후에 3항 연산자에도 익숙해 져야겠다!!
프로그래머스 각도기 - 자바스크립트
function solution(angle) {
var answer = 0;
if ( 0 < angle && angle < 90 ) {
answer = 1
} else if ( angle = 90) {
answer = 2
} else if ( 90 < angle && angle < 180 ) {
answer = 3
} else if ( angle = 180 ){
answer = 4
}
return answer;
}
console.log(solution(70))
console.log(solution(91))
console.log(solution(180))
출력 결과 :
1
2
2
문제점 :
조건문 안에 조건을 작성할 때
angle 값이 90일 때를 정하고 싶다면..!!
=이 아니라 ==이나 ===으로 코드를 작성해야 하는데... 저번부터 자꾸 실수한다..!!!!!!
오타 작성이나 =을 빼먹는 이런 실수는 더이상 하지 않도록 정신 바짝 차려야겠다