arr.map((row, ri) => {
row.map((cell, ci) => {
if (cell.textContent) {
trial++;
}
a.parentNode 하면 a의 부모 태그를 지정해줌
반대로 a.children 하면 자식 태그로 - 여러개있으면 []안에 넣어져있지만 배열 아님
HTMLCollection(3) [td, td, td] - 콘솔에 찍어보면 이렇게 나오는데 저렇게 앞에 뭔가 써있으면 배열 아님(유사배열 이라고 함 - 객체임)
그냥 배열은 (3) [td,td,td] 이렇게 나옴
당연히 배열이 아니니깐 forEach같은 배열에만 쓸수있는 반복문 같은건 못씀(for문은 쓸 수는 있음)
이런거 진짜 배열로 바꾸는법
Array.from(유사배열) - 진짜 찐 배열이 리턴됨
every/some
let content = true;
arr.map((row, ri) => {
row.map((cell, ci) => {
if (! cell.textContent) {
content = false }
테이블 하나를 만들었는데 여기에 내용이 다 차있는지를 찾고싶음 / arr은 2차원배열로 안에 td가 들어있다고 가정
이런 코드가 있다고 했을 때 map은 모든 cell의 인덱스를 다 조사해서 있는지 없는지를 조사해줄거임
근데 만약에 맨 처음 조사한 cell이 빈칸이라면 굳이 그 뒤까지 다 조사할 필요가 없지만
함수에는 기본적으로 return undefined라는게 달려있기 때문에 저기에 return을 해도 중간에 빈칸 찾았다고 끝나고 그러지 않음
한마디로 지금 필요한 건 모두 다 있어야 true - 하나라도 빈칸 발견되면 false를 만들어주는게 필요
every는 1차원 배열에만 사용가능
2차원 배열을 1차원으로 바꾸고싶으면
2차원배열.flat( ) - [[1,2,3],[4,5,6]] => [1,2,3,4,5,6] 이렇게 바뀜
2차원.flat( ).every((td) => td.textContent(*td.textContent === true를 생략한거) 해주면 모두 다 내용이 있어야 true가 리턴 / 아니면 false
2차원.flat( ).some((td) => td.textContent) 이건 하나라도 있으면 true/ 아니면 false
뜯어보면 저 return값인 td.textContent가 true 아니면 false로 리턴이 될텐데 every는 모든값이 다 true로 리턴이 돼야 최종적으로 true인거고 some은 하나라도 true로 리턴이 돼야지 true인거
이걸 쓰면 좀 빠르게 하나라도 조건에 맞지않는게(false) 나오면 함수를 끝내주기 때문에 편함(코테같은거 볼때 유용)
every는 모든 조건이 다 true여야 true
some은 하나라도 true여야 true -
'JS' 카테고리의 다른 글
호출스택과 이벤트 루프 정리 (1) | 2023.01.21 |
---|---|
Iterable/Iterator 정리 (0) | 2023.01.11 |
이벤트 버블링 현상 (1) | 2022.12.28 |
var이랑 let,const 차이점 (0) | 2022.11.30 |
SetTimeOut 함수쓸 때 주의점 (0) | 2022.11.30 |