[TIL] 항해99 9일차

돼지·2022년 1월 18일
0

항해99

목록 보기
14/104

알고리즘 28문제까지 풀기 완료

앞으로 12문제가 더 남았는데 다 풀 수 있을지는 모르겠다.

오늘 알고리즘 모의고사 테스트를 진행했는데 지정 날짜에서 며칠 후 값을 리턴하는 문제였다.

최근 new Date()를 활용한 문제를 풀었기에 콘솔로 하나하나 찍으며 값을 찾아나갔다.

찾으면서 배우는 메서드였는지 set,get를 통한 월과 일을 찾아 추출 하였고 그 값을 다시 new Date()에 담아 보기좋게 만들어줬다.

1월 20일에는 진짜 테스트가 기다리고 있기때문에 이번주내내 알고리즘을 공부해야한다 ..
지옥이다.
너무어려워.
프로그래머스 레벨1도 에베레스트처럼 보이기 시작한지 오래..

무튼 배운것들 정리하자.

While문

while(조건){
 소스코드 
}


//ex)
while(let i < 10){
	let value = value + i;
  	i++; 
}

이런식으로 작성한다.
다만 주의사항이 있다.
while문은 true면 무한 반복을 하게 되므로 조건에 break를 걸어야 탈출 할수 있다.

For in문

let obj = {
    a: 1, //key : value
    b: 2,
    c: 3
};

for (value in object){
  소스코드
}

객체 내의 속성들을 반복하여 작업을 수행할 수 있다.

객체 내 key값에는 접근 가능하나 value 값에는 접근하지 않는다.

for...in 사용 시 주의점

  • 순서를 의식하지 않기 때문에 순서를 의식해야 하는 배열의 경우 사용하지 않는 것이 좋다.

  • length 사용 불가 (오브젝트의 경우 배열처럼 개수를 셀수 없기 때문)

  • value값은 string이다.(연산불가)
    이런 특성들은 각 매서드마다 있어 사용 시 콘솔을 찍어보자

For of문

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

ES6에 새롭게 추가된 구문이다. iterator(반복자) 속성이 있는 객체(Array, Set, Map, String, TypeArray, arguments 등)의 값을 반복하며 string와 같은 일반 문장형에도 loop가 가능하다.

forEach문

let arr = ["a", "b", "c"];
arr.forEach(function(i){
    console.log(i);
});
// a, b, c

배열(Array)에서만 사용 가능한 매서드. 배열의 각 요소들이 반복해서 작업을 수행할 수 있도록 돕는다.

또한 item이라는 콜백함수가 배열 내의 각 요소들의 값을 가리키고 있음을 알수있다.

각 반복문의 차이점

for in

  • 열거 가능한(enumerable) 속성이 true로 설정된 객체들만 사용 가능

for of

  • [Symbol.iterator]속성이 있는 요소에 대해 반복 가능

for in

  • 순서보장 불가, length사용 불가, value값은 string이다.

for in은 오브젝트
for of는 배열
에서 각 반복문 종류를 사용하는 것이 좋다.

출저 - https://swimjiy.github.io/2019-02-17-js-for

전개연산자

정의 (object or Array)

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 메서드는 인자로 전달받은 값 순으로 기존 배열 끝에서부터 값을 추가하지만, 전개 연산자는 위처럼 배열의 아무 곳에나 추가 할 수 있다.

전개 연산자로 할당하면 2차원 형태가 되지 않는다.

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

profile
먐미

0개의 댓글

관련 채용 정보