오늘은 드디어 주말이 찾아왔고 회복의 시간이었던 것 같다.
진짜 많이 잤고 일주일동안 쌓인 걸 회복해서 그런지 정답률이 낮았던 알고리즘 문제를 꽤 빠르게 통과한 것 같다!
차근차근 하다보니 어느새 다음 단계로 넘어가는데 아직 여러 일을 같이 하느라 느리지만 성장하는 것 같아 뿌듯하다.
그리고 요즘 너무 개념적인 공부만 하다보니 구현 능력이 떨어지는 느낌도 드는데 슬라이드 만들기부터 다시 시작해보려 한다!
react강의가 끝나고 12월 즈음부터 프로젝트를 한달 계획으로 진행할 건데 미리미리 좀 준비를 해놓자!
알고리즘 문제 풀기(프로그래머스)
https://github.com/hoinlee-moi/Algorithm
JS기본문법 다시 공부
https://github.com/hoinlee-moi/ModernJS
React 강의 듣기
https://github.com/hoinlee-moi/React_prac
for반복문! - 무엇으로 리스트를 돌아야 하나
도움 출처 : https://yceffort.kr/2021/06/best-solution-for-looping-over-array
JS를 사용하다 보면 배열을 순회하는 방법이 몇가지 있는데 계속 for만을 이용하다보니 불편함도 많고 map이나 reduce등을 사용해도 반복문이 필요한 경우가 확실히 있는 것 같아 찾아보았다
4가지의 for문이 있었는데
for
for-in
forEach
for-of
for
근본부터 있던 방법으로
const arr = ['a', 'b', 'c']
arr.prop = 'prop'
for (let i = 0; i < arr.length; i++) {
const e = arr[i]
console.log(i, e)
}
// 0 "a"
// 1 "b"
// 2 "c"
for-in
새로운 방식인 줄 알았는데 for와 같이 근본부터 있던 방식이었다.
const arr = ['a', 'b', 'c']
arr.prop = 'prop'
for (const key in arr) {
console.log(key, typeof key, arr[key])
}
// 0 "string" a
// 1 "string" b
// 2 "string" c
// 3 "string" prop prop
하지만 위의 코드 실행결과처럼 for-in
을 배열을 순회하는데 쓰는 건 별로 좋지 않다.
key
값만 가져올 수 있다key
값의 타입에서 볼 수 있다시피, 숫자가 아닌 문자열로 나온다.const arr = [1, 2, 3]
arr[0] === arr['0'] // true
배열은 "[]"에서 숫자로도 접근할 수 있기 때문에 객체와 다르다고 생각할 수 있다. 그러나 배열 또한 객체이므로, "[]"안에 심볼 외의 값이 들어가면 강제로 string으로 변환한다.
모든 enumerable한 키들을 죄다 순회한다.
따라서 for-in
은 객체가 enumberable한 모든 속성을 순회할 때 사용하는 것이 좋다. 그러나 이 경우에도, 프로토 타입 체인을 순회하는 것이 더 낫다.
forEach
ES5에서 추가된 새로운 방법,Array.prototype.forEach()
이다.
const arr = ['a', 'b', 'c']
arr.prop = 'prop'
arr.forEach((e, index) => {
console.log(e, index)
})
// a 0
// b 1
// c 2
배열의 요소와 인덱스 모두에 접근할 수 있다.
하지만 단점의 요소가 있는데
await
를 루프 내부에 쓸 수 없다.forEach()
중간에 루프를 탈출하는 것이 곤란하다. 다른 문법의 경우 break
로 가능const arr = ['a', 'b', 'c']
arr.forEach((e, index) => {
console.log(e)
if (e === 'b') {
// break Illegal break statement
return
}
})
// a
// b
// c
for-of
ES6에 나온 가장 최신 기능
const arr = ['a', 'b', 'c']
arr.prop = 'prop'
for (const e of arr) {
console.log(e)
}
// a
// b
// c
await
를 사용한 for-await-of가 가능하다break``continue
를 사용할 수 있다for-of
를 활용하면 키만 접근하거나 혹은 키와 값 모두 접근하거나 등이 모두 가능하다
const arr = ['a', 'b', 'c']
for (const key of arr.keys()) {
console.log(key, typeof key)
}
// 0 "number"
// 1 "number"
// 2 "number"
const arr = ['a', 'b', 'c']
for (const [key, value] of arr.entries()) {
console.log(key, value)
}
// 0 "a"
// 1 "b"
// 2 "c"
const m = new Map().set(1, 1).set(2, 2).set(3, 3)
for (const [key, value] of m) {
console.log(key, value)
}
// 1 1
// 2 2
// 3 3
for-of
로 다른 순회문에서 할 수 있는 모든 것을 할 수 있어 가장 좋다.forEach
가 가장 느리긴 하다) 그러나 JS에서 성능이 유의미할 정도로 순회문을 돌아야 한다면, 웹 어셈블리 등 다른 방법을 알아보는 것이 좋다.map
과 reduce
를 사용해 해결할 수 있고 함수형에 읽기도 간결하긴 하다!
와 멋있으세요...... 반했읍니다!