2주 5일 - 배열 2022-09-02

CodeModel·2022년 9월 2일
0

인사말

오늘은 배열에 대해서 배운다 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. 그 후 화살표 점 누르면서 확인

복습할때 아주 유용하게 사용하고 있다

리펙토링

조금만 더 생각해서 코드를 더 간결하게 쓸 수 있거나 시간복잡도를 줄여보는 것 이다.

취업을 하기 위해 코딩테스트를 볼때 리펙토링을 한다면 점수를 더 받을 수 있다.

알게된 점

slice(시작할요소, 끝낼요소) ● - ○

시작할요소 ~ 끝낼요소 -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를 한다면 더 짧게 리펙토링 할 수 있다.

마무리

오늘은 수업이 끝나고도 계속해서 복습을 하였다. 굉장히 시간이 많이 들었지만 공부를 한 느낌이 들어서 뿌듯한 하루였다.

profile
개발자가 되기 위한 일기

0개의 댓글