오늘은 배열에 대해서 배운다 html과 css 그리고 CLI와 git을 넘어 그디어 아는 내용이 나왔다 하지만 자바스크립트의 배열은 처음이라 열심히 공부하려 한다 시작한다!
여러개의 데이터를 한번에 담아 처리하기 위해 필요하다
배열 - 순서에 대한 정보(index)를 가지고 있는 자료 구조
변수를 array라 하겠다
배열 선언 - let array = [1,2,3,4];
배열 인덱스로 찾는법 - array[2];
인덱스로 배열 값 변경 - array[2] = 200;
2차원 배열 인덱스 - array[2][1];
배열의 길이 알아내는법 - array.length;
배열 for문 - for(let n = 0; n < array.length; n++) {}
Array.isArray() - 배열인지 검사
console.table(array); - 그림으로 배열의 모습을 보여줌
arr.push() - 끝부분의 배열값 추가
arr.pop() - 끝부분의 배열값 삭제
arr.unshift() - 앞부분의 배열값 추가
arr.shift() - 앞부분의 배열값 삭제
array.indexOf() - 그 배열 요소의 인덱스를 알려줌, 없으면 -1이 나온다. 그래서 그 단어가 있는지 없는지 검사하려면 !== -1 하면 존재여부 확인 가능하다.
1.푼 문제를 복사해서 콘솔창에 붙여넣고 엔터
2.debugger; 작성 후 함수 호출
3. 그 후 화살표 점 누르면서 확인
복습할때 아주 유용하게 사용하고 있다
조금만 더 생각해서 코드를 더 간결하게 쓸 수 있거나 시간복잡도를 줄여보는 것 이다.
취업을 하기 위해 코딩테스트를 볼때 리펙토링을 한다면 점수를 더 받을 수 있다.
시작할요소 ~ 끝낼요소 -1 값 만큼 가져온다. 컨트롤 c 컨트롤 v 라고 생각하자 원본 변경하지 않는다.
Math.max(0,2,1) - ()안의 값들 중 가장 큰 값을 돌려준다 -> 2
return []; - return 값으로 빈 배열을 준다.
sort - 적절한 위치에 정렬한 후 배열을 반환한다.
... - 배열의 껍데기를 벗긴다
->사용 예시 = return [...arr1, ...arr2];
concat - array1 과 array2의 배열을 합친다.
ex)
const array3 = array1.concat(array2);
words.includes - 검사 하는거의 함수
map 새로운 배열로 반환한다
ex)
array1 = [1, 4, 9, 16];
map1 = array1.map(x => x * 2);
console.log(map1);
->[2, 8, 18, 32]
map과 filter의 차이
map은 조건에 맞지 않는 undefined도 배열 요소로 만들어 버린다.
filter는 조건에 맞지 않는 건 배열 요소로 넣지 않는다.
for...of - 변수에 배열의 값을 넣으면서 반복하는 것 같다
ex) for (const element of array1)
arr.join('') - 배열의 콤마를 없애고 공백없이 표현
ex) [1, 2, 3, 4, 5] -> '12345'
배열의 값 여러개중 길이가 가장 긴 문자열의 배열을 리턴하는 문제였다. 나는 이 문제를 for문을 사용해 접근하였다.
1.먼저 for문을 돌렸으며
for(let n = 0; n < str.length; n++)
2.if문을 이용해 length가 길이보다 앞에 것 보다 클때 작을때를 나누었다.
if(a[n].length < a[n+1].length) {
length = a[n+1]
} else if (a[n].length >= a[n+1].length) {
length = a[n]
}
return length;
}
그런데 오류가 났다.
이걸 수업 끝나고 매우 고생해서 풀었다. 푼 방법은 먼저
let words = str.split(' ');
let max = words[0];
을 이용해 입력받는 str값을 split으로 쪼개 배열로 만든다
그 후 max를 선언해 쪼갠 값의 첫번째를 할당한다.
그 후 for문을 돌리는데 핵심 코드는 if문 안쪽을
max.length < words[i].length
이렇게 작성하여 max값과 그 다음값을 비교해 계속 계속 max값을 큰 값으로 바꿔주는 것 이다. 여기서 굉장히 의문점이 있고 오류가 난 부분이 있는데 바로 wrods[i+1].length 가 계속 오류가 난 것이다. 계속해서 방법을 돌려서 썼는데 이 부분의 오류는 해결되지 않았다. 이해할 수 없는 오류이다. 결국 앞서 말한 for문을 사용해 해결하였다.
앞이 고정된 값과 고정되지 않은 값은 뒤에서부터 슬라이스를 한다면 더욱 더 좋은 코드를 작성할 수 있다.
[1, 2, 3, 4, 5, 6, 7, 8]
slice(-4) -> [5, 6, 7, 8]
slice(-4, -8) -> [1, 2, 3, 4]
이렇게 slice를 한다면 더 짧게 리펙토링 할 수 있다.
오늘은 수업이 끝나고도 계속해서 복습을 하였다. 굉장히 시간이 많이 들었지만 공부를 한 느낌이 들어서 뿌듯한 하루였다.