Java Script에서 배열은 java의 Array List <Object>와 비슷하다.
js의 배열은 제네릭 부분에 오브젝트로 설정되어있는 것처럼 어떤 값이든 받을 수 있는 배열이다.
선언 방법은 5가지로
var arr1 = new Array();
var arr2 = new Array(5);
var arr3 = [];
var arr4 = [1, 2, 3, 4, 5];
방의 크기를 지정하지 않는 방법
방의 크기만 지정하는 방법
방의 크기를 지정하지 않는 방법2
값을 바로 선언하는 방법
4가지가 된다.
배열에서 사용할 수 있는 메소드들은 아래와 같이 있다.
몰론 더 많이 있지만 자주 쓰이는거 위주로 모아놨다.
indexOf(문자열) : 인자로 받은 값이 배열에 어디 위치 했는지를 반환한다.
concat(배열) : 인자로 받은 배열을 합칠 때 사용한다.
join(구분자) : 배열의 값들을 '구분자'로 구분하여 합쳐서 값을 반환한다. (그냥 배열 자체를 출력 했을 때와 결과가 같지만 자료형은 String) (구분자 기본값은 ',' 이다.)
reverse() : 배열을 뒤집는다.
sort() : 배열을 정렬한다.(단, 숫자의 경우 456 이라면 맨 앞의 숫자 4를 기준으로 정렬, 문자열로 인식해서 정렬한다.)
push(Object) : 배열의 뒤에 값을 추가한다.
pop() : 배열의 맨 뒤의 값을 제거하고 그 값을 리턴
shift() : 배열의 맨 앞의 요소를 제거
unshift(Object) : 배열의 맨 앞에 값을 추가
slice(index1, index2) : index1부터 index2 - 1 범위의 배열 값을 반환한다.
splice(index, 갯수, 추가할 Object) : 배열의 index번째 부터 '갯수' 만큼 삭제하고 맨 뒤에 'Object'를 추가한다.
toString() : 배열의 값들을 ','로 구분하여 문자열로 반환한다, join과 비슷하지만 구분자를 지정 할 수 없다.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style type="text/css"> .area{ border: 2px solid red; background-color: lightgray; height: 200px; } </style> </head> <body> <h1>배열</h1> <h3>배열이란?</h3> <p>자바스크립트에서는 자료형 지정이 없기 때문에 모든 자료형을 보관하는 변수의 모음을 배열로 처리한다.<br> 자바에서의 arrayList와 비슷하다.</p> <div id="area1" class="area"></div> <button onclick="arrayTest();">확인하기</button> <script type="text/javascript"> function arrayTest() { var area1 = document.getElementById("area1"); //배열을 생성하는 4가지 방법 var arr1 = new Array(); var arr2 = new Array(5); var arr3 = []; var arr4 = [1, 2, 3, 4, 5]; console.log(arr1); console.log(arr2); console.log(arr3); console.log(arr4); console.log(typeof(arr1)); console.log(typeof(arr2)); console.log(typeof(arr3)); console.log(typeof(arr4)); // 자바의 컬렉션처럼 모든 타입의 값을 배열 형태로 담을 수 있다. var arr5 = ['문자', 2, true, [1, 2, 3, 4]]; console.log(arr5); area1.innerHTML += arr5 + "<br>"; console.log(arr5); for(var i = 0; i < arr5.length; i++){ area1.innerHTML += 'arr5[' + i + '] : ' + arr5[i] + "<br>"; if(i == 3){ for(var j = 0; j < arr5[i].length; j++){ area1.innerHTML += 'arr5[' + i + '][' + j + '] : ' + arr5[i][j] + "<br>"; } } } } </script> <hr> <h3>배열의 선언</h3> <p>배열 선언시 크기를 지정하지 않고 선언할 수도 있고, 크기를 정하고 선언할 수도 있다.</p> <div id="area2" class="area"></div> <button onclick="arrayTest2();">확인하기</button> <script type="text/javascript"> function arrayTest2() { var area2 = document.getElementById("area2"); var arr1 = new Array(); var arr2 = new Array(3); console.log(arr1); console.log(arr2); // 크기를 지정하지 않은 배열에 값 대입 add와 비슷 arr1[0] = '바나나'; arr1[1] = '복숭아'; arr1[2] = '키위'; arr1[3] = '딸기'; console.log(arr1); // 하지만 콘솔에서 맨 처음 console.log(arr1);을 펼쳐보면 바나나 등등 데이터가 똑같이 들어가있다. // 콘솔은 최종의 데이터를 보여주는것을 꼭 생각해두자. // 크기를 지정한 배열에 값 대입 arr2[0] = '자동차'; arr2[1] = '비행기'; arr2[2] = '도보'; // 없는 인덱스에도 값 대입(동적으로 생성해준다.) arr2[3] = '기차'; console.log(arr2); var arr3 = new Array('홍길동', '임꺽정', '신사임당'); console.log(arr3); var arr4 = ['java', 'oracle', 'html5', 'css3', 'javascript']; console.log(arr4); } </script> <hr> <h3>Array 객체의 메소드</h3> <p>Array도 하나의 객체이기 때문에 배열에서 활용할 수 있는 메소드가 있다.</p> <h4>indexOf() : 배열에서 요소가 위치하는 인덱스를 리턴</h4> <div id="area3" class="area"></div> <button onclick="methodTest1();">확인하기</button> <script type="text/javascript"> function methodTest1() { var area3 = document.getElementById("area3"); // area3 같이 id로 지정하면 전역변수로 지정되기 때문에 이와같이 선언하지 않고 // 그냥 써도 되지만 권장하지 않는 방법이다. var arr = ['사과', '딸기', '바나나', '복숭아', '키위', '파인애플', '토마토']; var str = prompt("찾는 과일 이름을 입력하세요"); area3.innerHTML += "당신이 찾는 과일 " + str + "은" + arr.indexOf(str) + "번째 인덱스에 있습니다."; } </script> <br> <h4>concat(배열명) : 두 개 혹은 세 개의 배열을 결합할 때 사용한다.</h4> <div id="area4" class="area"></div> <button onclick="methodTest2();">확인하기</button> <script> function methodTest2() { var area4 = document.getElementById("area4"); var arr1 = ['사과', '딸기', '바나나']; var arr2 = ['복숭아', '키위', '파인애플', '토마토']; var arr3 = arr1.concat(arr2); var arr4 = arr2.concat(arr1); area4.innerHTML += "arr1 : " + arr1 + "<br>"; area4.innerHTML += "arr2 : " + arr2 + "<br>"; area4.innerHTML += "arr1 기준으로 배열을 합침 : " + arr1.concat(arr2) + "<br>"; area4.innerHTML += "arr2 기준으로 배열을 합침 : " + arr2.concat(arr1) + "<br>"; // 원본 배열에 영향을 끼치지 않는 메소드이다. area4.innerHTML += "arr1 다시 출력 : " + arr1 + "<br>"; area4.innerHTML += "arr2 다시 출력 : " + arr2 + "<br>"; console.log(arr1); console.log(arr2); console.log(arr3); console.log(arr4); } </script> <h4>join() : 배열을 결합하여 문자열로 반환한다.</h4> <div id="area5" class="area"></div> <button onclick="methodTest3();">확인하기</button> <script type="text/javascript"> function methodTest3() { var area5 = document.getElementById("area5"); var arr = ['소녀시대', '핑클', 'SES', '미쓰에이']; //,를 기준으로 문자열 합치기를 한 결과 문자 var arrJoin = arr.join(); area5.innerHTML += "arr : " + arr + "<br>"; area5.innerHTML += "arrJoin : " + arrJoin + "<br>"; area5.innerHTML += "arr의 자료형 : " + typeof(arr) + "<br>"; area5.innerHTML += "arrJoin의 자료형 : " + typeof(arrJoin) + "<br>"; console.log(arr); console.log(arrJoin); // String의 Split 키워드로 다시 원상복구가 가능하다. } </script> <br> <h4>reverse() : 배열의 순서을 뒤집는다.</h4> <div id="area6" class="area"></div> <button onclick="methodTest4();">확인하기</button> <script type="text/javascript"> function methodTest4() { var area6 = document.getElementById("area6"); var arr = [1,2,3,4,5,6,7,8,9]; //원본 배열에 영향을 끼치는 메소드이다. area6.innerHTML += "arr : " + arr + "<br>"; area6.innerHTML += "arrReverse : " + arr.reverse() + "<br>"; area6.innerHTML += "arr 다시 출력 : " + arr + "<br>"; } </script> <br> <h4>sort() : 배열을 내림차순 혹은 오름차순으로 정렬한다.</h4> <div id="area7" class="area"></div> <button onclick="methodTest5();">확인하기</button> <script type="text/javascript"> function methodTest5() { var area7 = document.getElementById("area7"); var arr = [10, 42, 324, 456, 984, 412]; // 오름차순 정렬 // 숫자 크기대로 정렬하는 것이 아님 // 배열에 있는 내용을 문자열로 바꾸어 아스키코드 문자 순서로 정렬되니 주의해야 함 // 또한 원본 배열에 영향을 끼치는 메소드이다. area7.innerHTML += "arr : " + arr + "<br>"; area7.innerHTML += "arr.sort()의 값 : " + arr.sort() + "<br>"; area7.innerHTML += "arr 다시 출력 : " + arr + "<br>"; // 내림차순 정렬 // 두 번째 인수가 더 큰 경우 양수값을 리턴하여 순서를 바꾼다. area7.innerHTML += "내림차순 정렬 : " + arr.sort(function(left, right){ return right - left; }) + "<br>"; area7.innerHTML += "arr 다시 출력: " + arr + "<br>"; } </script> <br> <h4>push() : 배열의 맨 뒤에 요소를 추가<br> pop : 배열의 맨 뒤에 요소를 제어하고 리턴</h4> <div id="area8" class="area"></div> <button onclick="methodTest6();">확인하기</button> <script type="text/javascript"> function methodTest6() { var area8 = document.getElementById("area8"); var arr = ['서초동', '방배동', '역삼동', '삼성동', '대치동']; area8.innerHTML += "arr의 기본값 : " + arr + "<br>"; arr.push('남양주시'); area8.innerHTML += "arr에 push : " + arr + "<br>"; arr.sort(); area8.innerHTML += "arr 정렬 : " + arr + "<br>"; arr.push('잠실본동'); arr.sort(); area8.innerHTML += "arr에 push2 : " + arr + "<br>"; area8.innerHTML += "arr에서 pop : " + arr.pop() + "<br>"; area8.innerHTML += "arr에 pop 수행 후 : " + arr + "<br>"; arr.pop(); arr.pop(); arr.pop(); arr.pop(); arr.pop(); for(var i = 0; i < arr.length; i++){ console.log(arr[i]); } } </script> <br> <h4>shift() : 배열의 맨 앞의 요소 제거<br> unshift() : 배열의 맨 앞의 요소 추가</h4> <div id="area9" class="area"></div> <button onclick="methodTest7();">확인하기</button> <script type="text/javascript"> function methodTest7() { var area9 = document.getElementById("area9"); var arr = ['야구', "축구", "볼링", "탁구", "테니스"]; area9.innerHTML += "arr의 기본값 : " + arr.shift() + "<br>"; area9.innerHTML += "arr에 shift하면? : " + arr.shift() + "<br>"; area9.innerHTML += "arr 다시 출력 : " + arr + "<br>"; area9.innerHTML += "arr에 unshift하면? : " + arr.unshift("당구") + "<br>"; area9.innerHTML += "arr 다시 출력 : " + arr + "<br>"; } </script> <br> <h4>slice() : 배열의 요소 선택해서 잘라내기<br> splice() : 배열의 index위치의 요소 제거 및 추가</h4> <div id="area10" class="area"></div> <button onclick="methodTest8();">확인하기</button> <script type="text/javascript"> function methodTest8() { var area10 = document.getElementById("area10"); var arr = ["자바", "라클이", "html5", "css3", "javascript"]; area10.innerHTML += "arr : " + arr + "<br>"; // slice(시작인덱스, 종료인덱스 + 1) area10.innerHTML += "slice를 해보면 : " + arr.slice(2, 4) + "<br>"; //원본에 영향을 끼치지 않는 메소드 area10.innerHTML += "원본 arr : " + arr + "<br>"; // splice(index, 제거수, 추가값) // 2번 인덱스부터 2개의 요소를 꺼내고, 추가값으로 대체한다. area10.innerHTML += "splice를 해보자 : " + arr.splice(2, 2, 'spring') + "<br>"; area10.innerHTML += "원본을 다시 보면? : " + arr + "<br>"; } </script> <br> <h4>toString() : 배열을 문자열로 반환한다.</h4> <div id="area11" class="area"></div> <button onclick="methodTest9();">확인하기</button> <script> function methodTest9(){ var area11 = document.getElementById("area11"); var arr = ["나는", "오늘", "부터", "다이어트를", "시작한다."]; area11.innerHTML += "기본 arr 출력 : " + arr + "<br>"; // 원본 배열에 영향을 끼치지 않고 문자열을 반환하는 함수이다. area11.innerHTML += "toString : " + arr.toString() + "<br>"; area11.innerHTML += "arr의 자료형 : " + typeof(arr) + "<br>"; area11.innerHTML += "arr의 자료형 : " + typeof(arr.toString()) + "<br>"; area11.innerHTML += "join() : " + arr.join() + "<br>"; area11.innerHTML += "join한 자료형 : " + typeof(arr) + "<br>"; area11.innerHTML += "join에 구분자 지정하여 문자열 합치기 : " + arr.join('/') + "<br>"; } </script> </body> </html>