앞으로 12문제가 더 남았는데 다 풀 수 있을지는 모르겠다.
오늘 알고리즘 모의고사 테스트를 진행했는데 지정 날짜에서 며칠 후 값을 리턴하는 문제였다.
최근 new Date()를 활용한 문제를 풀었기에 콘솔로 하나하나 찍으며 값을 찾아나갔다.
찾으면서 배우는 메서드였는지 set,get를 통한 월과 일을 찾아 추출 하였고 그 값을 다시 new Date()에 담아 보기좋게 만들어줬다.
1월 20일에는 진짜 테스트가 기다리고 있기때문에 이번주내내 알고리즘을 공부해야한다 ..
지옥이다.
너무어려워.
프로그래머스 레벨1도 에베레스트처럼 보이기 시작한지 오래..
무튼 배운것들 정리하자.
while(조건){
소스코드
}
//ex)
while(let i < 10){
let value = value + i;
i++;
}
이런식으로 작성한다.
다만 주의사항이 있다.
while문은 true면 무한 반복을 하게 되므로 조건에 break를 걸어야 탈출 할수 있다.
let obj = {
a: 1, //key : value
b: 2,
c: 3
};
for (value in object){
소스코드
}
객체 내 key값에는 접근 가능하나 value 값에는 접근하지 않는다.
순서를 의식하지 않기 때문에 순서를 의식해야 하는 배열의 경우 사용하지 않는 것이 좋다.
length 사용 불가 (오브젝트의 경우 배열처럼 개수를 셀수 없기 때문)
value값은 string이다.(연산불가)
이런 특성들은 각 매서드마다 있어 사용 시 콘솔을 찍어보자
let arr = ["a", "b", "c"];
for (let i of arr) {
console.log(i);
};
// a, b, c
let fruit = 'orange';
for (let i of fruit) {
console.log(i);
};
// o, r, a, n, g, e
let arr = ["a", "b", "c"];
arr.forEach(function(i){
console.log(i);
});
// a, b, c
또한 item이라는 콜백함수가 배열 내의 각 요소들의 값을 가리키고 있음을 알수있다.
for in
for of
for in
for in은 오브젝트
for of는 배열
에서 각 반복문 종류를 사용하는 것이 좋다.
출저 - https://swimjiy.github.io/2019-02-17-js-for
ECMAScript6(2015)에서 새로 추가된 전개 연산자(Spread Operator)란 객체나 배열의 값을 하나 하나 넘기는 용도로 사용할 수 있다. 전개 연산자를 사용하는 방법은 점 세개(...)를 붙이면 된다.
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = [7, 8, 9];
const arrWrap = arr1.concat(arr2, arr3);
console.log(arrWrap); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
전개연산자 사용전 .concat() 사용
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = [7, 8, 9];
const arrWrap = [...arr1, ...arr2, ...arr3];
console.log(arrWrap); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
전개연산자 사용 후
const arr = [4, 5, 6];
const arrWrap = [1, 2, 3, ...arr, 7, 8, 9]
console.log(arrWrap); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
concat 메서드는 인자로 전달받은 값 순으로 기존 배열 끝에서부터 값을 추가하지만, 전개 연산자는 위처럼 배열의 아무 곳에나 추가 할 수 있다.
const arr1 = [1, 2, 3];
const arr2 = [4, 5];
arr1.push(arr2);
console.log(arr1); // [1, 2, 3, [4, 5]]
push 메소드를 사용하면 위의 결과값이 나오게 된다.
이 경우 기존 자바스크립트에서는 배열 객체의 프로토타입 매서드인 push.apply를 사용해야 한다.
const arr1 = [1, 2, 3];
const arr2 = [4, 5];
Array.prototype.push.apply(arr1, arr2);
console.log(arr1); // [1, 2, 3, 4, 5]
이렇게 apply를 사용해야 이쁘게 추가 된다.
하지만
const arr1 = [1, 2, 3];
const arr2 = [4, 5];
arr1.push(...arr2);
console.log(arr1); // [1, 2, 3, 4, 5]
전개연산자를 사용하면 보다 편리하고 이쁘게 정리 된다.
또 객체(object)에서도 동일하게 사용된다.
다만.
전개연산자를 이용한 복사에는 1차원에서만 유효하다.
const arr1 = [4, 5, [6, 7]];
const arr2 = [1, 2, 3, ...arr1];
console.log(arr2); // [1, 2, 3, 4, 5, [6, 7]]
그래서 기존 배열을 보존해야 할 때 유용하다.
reverse메소드는 배열을 역순으로 정의해주는데 기존 배열도 바꿔버린다.
이때 전개연산자를 사용하면 새로 추가한 값만 역순이 되고 기존 배열은 그대로다.
const arr1 = [1, 2, 3];
const arr2 = [...arr1].reverse();
console.log(arr1); // [1, 2, 3]
console.log(arr2); // [3, 2, 1]
출저 - https://velog.io/@recordboy/%EC%A0%84%EA%B0%9C-%EC%97%B0%EC%82%B0%EC%9E%90Spread-Operator