원래 자바스크립트에는 객체로 다 할 수 있다고 생각해서 배열이 없었음
하지만 성능상의 이유로 배열이 생겼고, 일반 객체와는 몇가지 차이점이 존재함
배열은 length property가 있음
이게 그냥 길이의 정보만 담는 것이 아니라, 배열임을 알려주는 역할을 한다.
Object.prototype 대신 Array.prototype을 갖고 있다.
Array 리터럴이 따로 존재한다. (대괄호)
JSON은 이 둘을 굉장히 다르게 다룬다.
사실 자바 스크립트 자체도 배열 개념을 모호하게 다루긴 함
배열을 만드는 방법은 2가지다
integer
)자바스크립트는 배열 탐색 메서드를 기본적으로 제공한다.
1 . indexOf
, lastIndexOf
메서드
인자 값을 갖고 있는 가장 첫번째 인덱스를 반환하고, 없다면 -1 반환한다.
주의할 점!
indexOf
를 사용 시, 반환값이 -1이 아닌지 확인하지 않고 사용한다면
컴파일 오류 없이 문제가 발생할 수 있기에, 조심해야 한다.
2 . includes
메서드
인자 값이 배열에 포함되어 있다면 true, 없다면 false 반환
reduce
메서드는 인자로 함수와 초기값을 전달받는데, 이때 초기값은 생략가능
함수를 통해 배열의 요소들을 하나의 결과 값으로 만들어내고 싶을 때 사용
이 때 전달받는 함수는 화살표 함수를 이용한다면
(누적값, 현재값, 인덱스) => {return 결과}
과 같이 짜면 된다.
약간 상세하게 조건 설정 가능한 iter 함수 느낌처럼 쓸 수도 있고
각각의 요소에 어떤 함수를 실행하고 싶을 때, 보통 for 문을 많이 사용하는데
JavaScript는 Iterating이라는 더 모던한 방법을 제공한다.
먼저 forEach
는
주어진 함수를 배열 요소에 각각 실행할 수 있게 하는 메소드이다.
전달받는 함수는 세가지 인자를 가질 수 있는데, (요소,인덱스,배열)이다.
사실 마지막 '배열'은 굳이 필요없는 인자임..
원래는 이 배열을 조작할 수 있도록 전달받은건데, 이 방법은 보통 좋지 않음
forEach
는 함수의 반환값을 무시하지만, 몇가지 메소드들은 이를 반영해줌
every
: false가 나오면 멈추면서 false 반환, 끝까지 다 true면 true 반환some
: ture가 나오면 멈추면서 true 반환, 끝까지 다 false면 false 반환find
: some
이랑 비슷하지만, true 대신 그 요소를 반환findIndex
: find
랑 비슷하지만, 요소 대신 인덱스 반환filter
: find
랑 비슷하지만, 배열을 끝까지 다 탐색해보고, true인 요소들만 모아서 새로운 배열을 만들어 반환해준다.map
: forEach
랑 비슷하지만, 새로운 배열을 반환할 수 있다.다만 단점도 갖고 있는데
1. 강제 종료나 강제로 계속 탐색이 불가능
2. 역순으로 실행하는 것이 불가능
sort
메서드가 있다.
인자로는 함수 하나를 받는데, 이를 생략하면 배열을 string 기준으로 정렬
그렇기에 number일 때 80이 9보다 앞에 오게 되는 불상사가 일어난다.
그래서 이럴때는, 인자로 주는 함수를 작성해서 sort() 안에 넘겨주면 됨
함수의 return 값에 따라 정렬의 유무가 달라지는데,
만약 return 값이 0이거나 음수라면 순서를 그대로 두고, 양수라면 바꾼다.
다만 a-b를 이용해서 return 값을 구하는 것이기 때문에
undefined 와 같은 값이 나올 때를 대비하여 코드를 짜주는 것이 좋다.
읽어볼만한 글
간단하게 정리하자면,
큐&스택 관련 메서드와 fill
, reverse
,sort
는 비순수, 나머지는 순수
push 대신 concat을 쓰는 이유가 여기에 있었다.