JavaScript Tutorial.24

ansunny1170·2021년 12월 12일
0
post-thumbnail

JS ARRAYS

배열은 둘 이상의 값을 가질 수 있는 특수 변수이다.

Why Using an Array?

항목 목록이 있는 경우 자동차를 단일 변수에 저장하면 다음과 같을 수 있다 :

let car1 = "Saab";
let car2 = "Volvo";
let car3 = "BMW";

하지만 자동차를 반복해서 특정 자동차를 찾으려면 어떻게 해야 할까?
그리고 3대가 아니라 300대가 있다면 어떨까?
이때 Array[]를 사용한다.

배열은 하나의 이름으로 많은 값을 가질 수 있으며, 인덱스 번호를 참조하여 값에 접근할 수 있다.

Creating an Array

배열 리터럴을 사용하는 것이 JS배열을 만드는 가장 쉬운 방법이다 :

const array_name = [item1, item2, ...];

※ const 키워드로 배열을 선언하는 것이 일반적이다. 아래 JS Array const에서 더 자세히 알 수 있다. (참조 : https://www.w3schools.com/js/js_array_const.asp)


공백과 줄 바꿈은 중요하지 않다. 선언은 여러줄에 걸쳐 있을 수 있다.

배열을 만든 다음 요소를 제공할 수도 있다.(초기화 가능)

Using the JavaScript Keyword new

다음 예제에서는 Array를 만들고 값을 할당한다 :

위 두 예제는 동일하다. new Array()를 사용할 필요가 없다. 단순함과 가독성 및 실행속도의 유리함을 위해 배열 리터럴 방법을 사용하자.

Accessing Array Elements

인덱스 번호를 참조하여 배열 요소에 접근한다 :

참고 : 배열 인덱스는 0부터 시작한다.

Changing an Array Element

아래 예제는 car[]의 첫 번째 요소 값을 변경한다.

Access the Full Array

JS를 사용하면 배열 이름을 참조하여 전체 배열에 접근 할 수 있다 :

Arrays are Objects

배열은 특별한 유형의 객체이다. JS의 typeof연산자는 배열에 대해 object를 반환한다.
그러나 JS배열은 배열로 가장 잘 설명된다.
배열은 elements에 접근하기 위해 숫자를 사용한다.
즉 아래와 같이 person[0]John을 반환한다 :

개체는 이름을(속성,키) 사용하여 members에 접근하려한다. 아래 예제에서 person.firstNameJohn을 반환한다 :

Array Elements Can Be Objects

JS변수는 객체가 될 수 있다. 배열은 특별한 종류의 객체다.
※이 때문에 동일한 배열에 다른 유형의 변수를 가질 수 있다.

  • 배열에 객체를 가질 수 있다.
  • 배열에 함수를 가질수 있다.
  • 배열에 배열을 가질 수 있다.
myArray[0] = Date.now;
myArray[1] = myFunction;
myArray[2] = myCars;

Array Properties and Methods

JS배열의 진정한 강점은 내장 배열 속성과 메서드이다 :

Array 메서드에 대한 자세한 내용은 다음장에서 다룬다.
(참조 : https://www.w3schools.com/js/js_array_methods.asp)

The length Property

배열의 length 속성은 배열(배열 요소의 수)의 길이를 반환한다.

length 속성은 항상 가장 높은 배열 인덱스 보다 하나 더 크다.

Accessing the First Array Element

Accessing the Last Array Element

Looping Array Elements

배열을 반복하는 한 가지 방법은 for루프를 사용하는 것이다.

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Arrays</h2>

<p>The best way to loop through an array is using a standard for loop:</p>

<p id="demo"></p>

<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fLen = fruits.length;

let text = "<ul>";
for (let i = 0; i < fLen; i++) {
  text += "<li>" + fruits[i] + "</li>";
}
text += "</ul>";

document.getElementById("demo").innerHTML = text;
</script>

</body>
</html>

Array.forEach()함수를 사용할 수도 있다 :

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Arrays</h2>

<p>Array.forEach() calls a function for each array element.</p>

<p id="demo"></p>

<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];

let text = "<ul>";
fruits.forEach(myFunction);
text += "</ul>";
document.getElementById("demo").innerHTML = text;

function myFunction(value) {
  text += "<li>" + value + "</li>";
} 
</script>

</body>
</html>

Adding Array Elements

배열에 새 요소를 추가하는 가장 쉬운 방법은 push()메서드를 사용하는 것이다 :

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Arrays</h2>

<p>The push method appends a new element to an array.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
const fruits = ["Banana", "Orange", "Apple"];
document.getElementById("demo").innerHTML = fruits;

function myFunction() {
  fruits.push("Lemon");
  document.getElementById("demo").innerHTML = fruits;
}
</script>

</body>
</html>
  • button을 누를 때마다, Lemon이 추가된다.



    length속성을 사용하여 배열에 새 요소를 추가할 수도 있다 :
<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Arrays</h2>

<p>The length property provides an easy way to append new elements to an array without using the push() method.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
const fruits = ["Banana", "Orange", "Apple"];
document.getElementById("demo").innerHTML = fruits;

function myFunction() {
  fruits[fruits.length] = "Lemon";
  document.getElementById("demo").innerHTML = fruits;
}
</script>

</body>
</html>
  • 역시 button을 누를 때마다, Lemon이 추가된다.


    ※ 인덱스가 높은 요소를 추가하면 배열에 정의되지 않은 구멍이(hole) 생길 수 있다.

Associative Arrays

많은 프로그래밍 언어는 명명된 인덱스가 있는 배열을 지원한다. 명명된 인덱스가 있는 배열을 연관배열(associative arrays 또는 해시,hashes)라고 한다.
JS에서 배열은 항상 번호가 매겨진 인덱스를 사용한다.

※ 명명된 인덱스를 사용하는 경우 JS는 배열을 객체로 재정의 한다.
그 후 일부 배열 메서드 및 속성은 잘못된 결과를 생성한다.


The Difference Between Arrays and Objects

JS에서 배열은 번호가 매겨진 인덱스를 사용한다.
JS에서 객체는 명명된 인덱스를 사용한다.

배열은 번호가 매겨진 인덱스가 있는 특수한 종류의 객체이다.

When to Use Arrays. When to use Objects.

  • JS는 연관 배열을 지원하지 않는다.
  • 요소 이름을 문자열(TEXT)로 지정하려면 객체를 사용해야 한다.
  • 요소 이름을 숫자로 지정하려면 배열을 사용해야 한다.

JavaScript new Array()

JS에서는 배열 생성자 new Array()가 내장되어 있다.
그러나 대신 [ ]를 안전하게 사용할 수 있다.
아래 두 개의 다른 문은 모두 point라는 이름의 빈 배열을 새로 만든다 :

아래 두 개의 다른 명령문은 모두 6개의 숫자를 포함하는 새 배열을 만든다 :

new키워드는 예상치 못한 결과를 초래할 수 있다 :
아래 결과를 보면 알 수 있듯이, 배열 수가 1개인 Array를 new를 사용하여 선언하였을 때, 이상한 값이 출력되었다.

흔한 실수 : 아래 두 선언문은 동일하지 않다.

cosnt points = [40]
const points = new Array[40]


How to Recognize an Array

일반적인 질문은 다음과 같다, 변수가 배열인지 어떻게 알 수 있을까?
문제는 JS연산자 typeofobject를 반환한다는 것이다.

JS 배열이 객체이기 때문에 typeofobject를 반환한다.

해결법 1 -Array.isArray()-

이 문제를 해결하기 위해 ECMAScript5(JS 2009)는 새 메서드 Array.isArray()를 정의하였다.

해결법 2 -Array.isArray()-

instanceof연산자는 객체가 주어진 생성자에 의해 생성된 경우 true를 반환한다.

Complete Array Reference

전체 Array에 대해 참고 하려면 아래 주소를 참조하자
(참조 : https://www.w3schools.com/jsref/jsref_obj_array.asp)

profile
공정 설비 개발/연구원에서 웹 서비스 개발자로 경력 이전하였습니다. Node.js 백엔드 기반 풀스택 개발자를 목표로 하고 있습니다.

0개의 댓글