JS와 HTML ID잡기
Uncaught TypeError: Cannot read properties of null (reading 'value')
별건 없고 늘 햇갈리는 부분인데 두 가지경우가 있다
1번인 경우가 대부분일텐데 오랜만에 js를 다루다 보니 id와 name잡는것을 햇갈렸다.
보다시피 js에서는 getElementById
로 email
과 password
를 잡아주었지만 html에서 전혀 id를 설정해 주지 않았다
일부러 name
과 id
둘다 안해주었다
햇갈려서 교차실험해본 결과 id
로 무조건 설정해 주어야 한다
말 그대로 getElementBy"id"
이기 때문이다
이렇게 해결해 주면 된다
그럼 아주 잘 실행된다
2번인 경우도 간혹있다
일전에 미니프로젝트와 다른 프로젝트를 하면서 느낀거지만 가장 하단인 </body>
위에<script src="/app.js"></script>
를 넣어주지 않으면 이친구가 연결시킨 해당 함수를 못읽는다
SyntaxError
Uncaught SyntaxError: await is only valid in async functions
이게 뭐라고 한참을 고민했다
친절하게 알려준 에러내용을 읽어보면 await
는 반드시 async
함수안에서만 유효하다는 뜻이다
꼭! 세트로 생각하고 잡아주자
잘 작동하는것을 볼 수있다
프로그래머스 행렬의 덧셈
https://school.programmers.co.kr/learn/courses/30/lessons/12950
내 코드
'''zip사용'''
def solution1(arr1, arr2):
answer = [[x+y for x, y in zip(i, j)]for i, j in zip(arr1, arr2)]
return answer
'''range(len())'''
def solutio2(arr1, arr2):
for i in range(len(arr1)):
for j in range(len(arr2[0])):
arr1[i][j] += arr2[i][j]
return arr1
'''list comprehension 변환'''
def solution3(arr1, arr2):
answer = [[arr1[i][j] + arr2[i][j]
for j in range(len(arr1[0]))] for i in range(len(arr1))]
return answer
'''map사용'''
def sumMatrix(arr1, arr2):
return [list(map(sum, zip(*x))) for x in zip(arr1, arr2)]
지현님 코드
def solution(arr1, arr2):
answer = [[] for _ in range(len(arr1))]
for i in range(len(arr1)):
for j in range(len(arr1[i])):
answer[i].append(arr1[i][j]+arr2[i][j])
return answer
이렇게 zip도 써보고 range(len())
로만 해보고 이를 List Comprehension
으로 바꿔보고 map
을 사용한 사람의 코드도 뜯어보았다
zip()
zip
이 아주 굉장했다
먼저 어떤건지 공식문서를 확인해보자
zip(*iterables, strict=False)
이게 무슨말이냐
Iterate over several iterables in parallel, producing tuples with an item from each one.
여러 이터러블. 즉, 반복가능한 항목을 병렬로 반복(parallel)하여 각 항목의 튜플을 생성한다는 뜻이다
중요한건 병렬
예를들어
arr1 = [[1, 2], [2, 3]]
arr2 = [[3, 4], [5, 6]]
for i in zip(arr1, arr2):
print(i)
# 출력
([1, 2], [3, 4])
([2, 3], [5, 6])
이렇게 나온다는 것이다
zip을 사용하지 않으면
for i in arr1:
for j in arr2:
print(f'this is i{i}and this is j{j}')
# 출력
this is i[1, 2]and this is j[3, 4]
this is i[1, 2]and this is j[5, 6]
this is i[2, 3]and this is j[3, 4]
this is i[2, 3]and this is j[5, 6]
이런식이기 때문에 zip으로 꺼내쓰기 아주 편하다
그렇게 다 뒤집어 까주기 위해
for i, j in zip(arr1, arr2):
print(i, j)
print('='*20)
for x, y in zip(i, j):
print(x, y)
# 출력
[1, 2] [3, 4]
====================
1 3
2 4
[2, 3] [5, 6]
====================
2 5
3 6
이렇게 빼주고 그걸 각각 더해서 리스트 형태로 담는데 쉽게 하기 위해 리스트컴프리헨션으로 묶은 것이다
두번째는 가장 무난한 방법이기에 넘어가고 가장 신기했던 map()
을 살펴보자
map()
map(function, iterable)
이는 반복가능한 객체의 각 요소에 적용하여 그 결과를 반환하는mapping
작업을 수행한다
이처럼 map(sum, zip(*x))
에서 *
로 튜플껍데기를 벗기고 이를 zip()
을 사용해
[(1, 3), (2, 4)]
[(2, 5), (3, 6)]
로 바꾼뒤 sum
으로 각각 mapping
해주고 이를 list()
를 사용해 리스트 형태로 만든 뒤 []
에 담아 한번 더 리스트에 담는다(2차원)
그리하여 답이
[[4, 6], [7, 9]]
이렇게 나온다