Hanachoi
2022. 5. 21. 22:06
- 다양한 자료형을 하나로 묶어 놓은 것.
- 예를들어, 사과,배,참외, 귤 등 과일들을 정하는데 일일히 변수를 지정하면 갯수가 매우 많아질 때 정리하기가 어려워진다. 그래서 우리는 fruit라는 배열을 만들어 그 안에 과일들을 넣어서 정리를 할 수 있다.
- 배열을 정할때는 대괄호[]로 사용한다. 사과, 배, 참외, 귤은 배열안에 들어있는 요소(element)라고 부른다.
- 배열에서 자릿수는 0부터 시작. 인덱스 0,1,2...이렇게 넘어간다.
const fruit = ['사과','배','참외','귤']
- 배열안에는 또 배열이 들어갈 수도 있음
const arrayOfArray = [[1,2,3],[4,5]];
arrayOfArray[0]; // [1,2,3]
- 변수들도 배열안에 들어갈 수 있음
const a = 10;
const b = 20;
const variableArray = [a,b,30];
variableArray[1]; //20(b의값)
- 배열에 들어있는 요소의 갯수를 알고싶으면 .length붙여주면 알수 있음
- 배열안에는 문자열, 숫자, undefined, boolean,배열,null 다 들어갈 수 있음
- 빈 값도 유효한 값이기 때문에 요소갯수를 셀 때 포함됨 null , undefined, false, '', NaN
- 배열은 배열마다 안에 들어있는 요소가 다를 것이기 때문에 길이도 다를 것이다. 그럼 마지막 번째 인덱스 요소는 어떻게 찾을 수 있나? [배열.length - 1 ] 하면 마지막 인덱스값을 찾을 수 있다.
- 그럼 똑같은 원리로 마지막에서 3번째 인덱스를 찾으려면? [배열.length - 3] 하면 찾을 수 있다.
#배열에 요소 추가하기
- 기본적으로 원하는 배열의 인덱스에 값을 추가하면 됨
const group = [1,2,3,4,5]
group[5] = 6
console.log(group) // 1,2,3,4,5,6 //
- 배열의 마지막에 요소를 추가하고 싶을 때, 배열의 길이만큼 잡아서 넣어 줄 수 있다. target.length -1 이 마지막 인덱스 자리니까 +1한다면 그 다음 자리로 들어갈 수 있다.
- .push를 사용해서도 넣을 수 있음.
- const로 우리가 배열을 만들었는데도 이렇게 요소를 넣을 수 있는건? 배열 자체를 바꿀 수는 없지만 내부의 값은 얼마든지 바꿀 수 있음.
const target = ['가', '나', '다', '라', '바'];
target[target.length] = '마';
console.log(target);
- 배열 가장 앞에 요소를 추가하고 싶으면? [배열.unshift('가')] unshift를 사용해서 요소를 넣어주면 배열을 하나씩 밀고 맨 앞에 요소를 넣어줄 수 있다.
#배열의 요소 제거하기
- 마지막 요소를 제거하고 싶을때는 [배열.pop();]
- 첫번재 요소를 제거하고 싶을때는 [배열.shift();]
- 가운데 요소를 제거하고 싶을때는 splice 사용. splice에서는 값을 두개 사용함. 첫 번째는 인덱스, 두번째는 제거할 요소의 갯수. 지금 아래에서는 인덱스2번째인 3부터 두개를 삭제한다.
- 만약 splice()안에 숫자를 하나만 쓰면 그 인덱스 값뒤로 싹 지워버린다.
const target = [1,2,3,4,5]
target splice(2,2);
console.log(target); //1,2,5 출력//
- splice로 값을 제거한 자리에 다른 값을 넣을 수도 있다. splice의 세번째 자리부터 바꿀 값을 넣어주면 됨
const target = ['가', '나', '다', '라', '마'];
target.splice(1, 3, '타', '파');
console.log(target); // ["가", "타", "파", "마"] 출력
- splice를 이용해서 아무것도 안지우고 요소를 넣을 수도 있음.
- 지우는 값을 0으로 해주면 아무것도 안지우고 그 인덱스 앞에 넣고싶은 요소를 넣어줌.
const target = [1,2,3,4,5]
target.splice(1,0,8)
target; //[1,8,2,3,4,5] 출력
#배열에서 요소찾기
- 배열에서 특정요소가 있는지 찾는 일종의 검색기능이 있음. [배열.includes()]
const target = [1,2,3,4,5]
const result = target.includes(2);
const result2 = target.includes(7);
console.log(result,result2); // true, false나옴//
- 검색하고 싶은 값이 몇 번째 인덱스에 위치하는지도 알 수 있음
target.indexof() // 앞에서부터
target.lastIndexOf() //뒤에서부터
- 만약에 해당하는 값이 배열안에 들어있지 않다면 값으로 그냥 -1이 출력됨.
#배열 반복하기
- 보통 배열,문자열 처럼 '열'자가 들어간 애들은 반복되는 경우가 많고 반복을 위해서 쓰는 경우가 많다. 그래서 반복문이랑 함께 쓰인다.
- while, for 문과 모두 같이 사용가능하다.
const target = [1,2,3,4,5]
let i = 0;
while (i<target.length){
console.log(target[i])
i++;
}
/*1
2
3
4
5
*/
- 문자열의 길이를 알고 싶으면 문자열의 길이도 찾아낼 수 있다.
'가나다라'.length // 4 출력
const target = '가나다라마바사'
let i = 0;
while (i<target.length){
console.log(target[i])
i++;
}
#배열 메소드(수정,조회)
- Q. 다음 배열에서 '라'를 모두 제거하려면? (hint : 이렇게 '모두'라는 말이 들어있으면 반복문을 사용!)
const arr = ['가','라','가','라','가','라'];
arr.indexOf('라') // 1
arr.splice(1,1) // 첫번째 '라'삭제
arr.indexOf('라') // 2 (1번째 '라'는 사라진 상태니까 현재 이 배열의'라'는 인덱스2)
arr.splice(2,1) // 두번째 '라'삭제
arr.indexOf('라') // 3
arr.splice(3,1)
arr.indexOf('라') // 마지막으로 혹시나 '라'가 더 있나 확인해봄 //
//-1출력. 배열안에 해당하는 값이 없다는 뜻 //
//라 모두 삭제됨
- 지금 여기서 반복되는 코드를 반복문으로 만들어보자.
- 반복문의 핵심은 반복문의 조건이 내가 반복하고 싶은 동안은 true, 멈추고 싶을때는 false가 되도록 만들어야 함.
- 반복문이 언제까지 반복되어야 할지도 생각해야함.
- 반복문을 만들기가 너무 어렵다면 먼저 절차를 쭉 써본담에 공통점을 찾는게 좋다.
const arr = ['가','라','나','라','다','라']
while(arr.indexOf('라') !== -1){
arr.splice(arr.indexOf('라'),1)
}
while(arr.indexOf('라') > -1){ // 위에서 절차를 생각해봤을때 -1값이 나오기전까지는 index숫자가 다 -1 이상의 숫자였으니까 이렇게 설정.
arr.splice(arr.indexOf('라'),1)
}
//['가','다','마']
const arr = [1,2,3,4,5]
arr.indexOf(1) // 0
if(arr.indexOf(1)){
console.log('1찾음')
}else{
console.log('못찾음')
}
//'못찾음' 출력
- 지금 위의 코드에서는 분명 배열안에 1이 있어서 if의 조건식이 참인데도 else문의 값이 나왔다. 왜그럴까? 우리가 공부할때 false가 되는 값 6가지가 있었다. : false, NaN, 0, '' , null, undefined 얘네가 if문에 들어가면 무조건 false가 된다. 그래서 지금 위의 코드는 else문이 실행된 것
if(arr.indexOf(1) > -1){
console.log('1찾음')
}else{
console.log('못찾음')
}
- 조건식을 위처럼 바꿔주면 됨. arr.indexOf(1) > -1 이면 1이 존재하냐, 안하냐를 판단하게 됨