Javascript Arrays

2021년 9월 7일 수정

이 글은 Javascript의 배열(Array)과 관련된 글을 정리한다.

배열에 특정 원소가 포함되어 있는지 판단하기

Array.prototype.includes() 를 사용하는 게 가장 간단하다.

["0", "1", "2", "3"].includes("0")  // -> true
["0", "1", "2", "3"].includes(0)    // -> false

위치(index)를 알고 싶다면 Array.prototype.find() 를 사용할 수도 있다.

["0", "1", "2", "3"].find(e => e === "0")  // -> 0
["0", "1", "2", "3"].find(e => e === "1")  // -> 1
["0", "1", "2", "3"].find(e => e === "4")  // -> undefined

For Each

자바스크립트의 Array에는 forEach 메서드가 제공된다.

> [1, 2, 3, 4, 5].forEach((e) => console.log(e))
1
2
3
4
5

위는 화살표 함수를 써서 간단하게 구현한 것이지만 조금 더 전통적인(?) 방식으로 구현하면 아래와 같다.

> [1, 2, 3, 4, 5].forEach(function(e) { console.log(e); });
1
2
3
4
5

일부러 전통적이라는 의미에서 세미콜론까지 붙여봤다. 근데 ES6를 지원하는 브라우저라면 굳이 쓸 필요는 없다. 개인적으로는 안 쓰는 것을 선호한다.

간혹 getElements류 함수의 결과로 forEach를 쓰려하면 에러가 나는 경우가 있는데 당연히 타입이 Array가 아니라서 오류가 발생한다. 이럴 때는 대충 아래처럼 돌려서 쓸 수 있다.

var elements = document.getElementsByClassName('some-class');
// pre ES6
Array.prototype.forEach.call(elements, function(e) { ... });
// after ES6
Array.from(elements).forEach((e) => { ... })

개인적으로 ES6 코드는 일부러 세미콜론을 안 붙이고 있으니 구분은 가능할 것 같다.

at

at 메서드는 배열 원소를 인덱스로 참조하는 커맨드다.

let lst = ['a', 'b', 'c']
lst[0]
// => 'a'
lst[1]
// => 'b'

음수를 사용할 수 있는데 Python의 리스트 타입에서 지원하는 기능과 비슷하게 끝에서 부터 엑세스하기 편하다.

lst[lst.length - 1]
// => 'c'
lst.at(-1)
// => 'c'

참고로 at 메서드는 대부분의 컬렉션에서 사용이 가능한 것 같다. 예를 들어 문자열 등에서도 인덱스 엑세스에 사용할 수 있다.