배열

GunYong·2023년 7월 13일
0

배열

객체와 함께 정말 많이 접해본 배열이다. 책을 정독하며 배열에 대해 몰랐던 사실이나 기록할만한 지식을 공유하려고 한다.

다양한 메서드들

  • Array.of

전달된 인수를 요소를 갖는 배열을 생성한다.

Array.of(1); // [1];
Array.of('string'); // ['string'];
  • Array.prototype.concat

concat 메서드는 인수로 전달된 값들을 원본 배열의 마지막 요소로 추가한 새로운 배열을 반환한다.

전달된 값이 배열인 경우 배열을 해체해서 새로운 배열의 요소로 추가한다, 원본 배열은 변경되지 않는다.

const arr1 = [1.2];
const arr2 = [3,4];
let result = arr1.concat(arr2);
console.log(result) // [1,2,3,4];

concat은 스프레드 문법으로 대체할수 있다.

let result = [1,2].concat([3,4]);
let result = (...[1,2],...[3,4]);
  • Array.prototype.reduce

자신을 호출한 배열을 모든 요소를 순회하며 인수로 전달받은 콜백 함수를 반복 호출한다.

첫번째 인수로 콜백함수, 두번째 인수로 초기값을 전달받는다. 이러한 과정을 반복하여 하나의 결과값을 반환한다.

자신을 호출한 배열의 모든 요소를 순회하며 하나의 결과값을 구해야 하는 경우에 사용한다.

평균구하기

const arr = [1, 2, 3, 4, 5];
const avg = arr.reduce((acc, cur, i, a) => {
    return i === a.length - 1 ? (acc + cur) / a.length : acc + cur;
},0);

모든 배열의 고차 함수(map,filter,some,every,find) 와 같은 것은 reduce로 나타낼 수 있다.

  • Array.prototype.flatMap

배열을 다루다 보면 split / join 을 이용하여 배열과 문자열로 왔다갔다 자주한다. 이때 배열을 하나의 배열로 합쳐주는 경우가 종종 있는데 유용할 것 같다.

const arr = ['hello', 'world'];
const result = arr.map((e) => e.split(''));
console.log(result.flat());
console.log(arr.flatMap(e => e.split('')))

위의 두 콘솔 결과는 같다.

여기서 다루지 않은 다양하고 유용한 메서드들이 엄청 많다. 필요할때 찾아보고 올바르게 사용하는 것이 좋다.

배열의 메서드를 사용하면서 느낀점은 원본 함수를 변경하는지 여부와 알고리즘 문제 풀때에는 시간복잡도에 따라서 해당 메서드를 사용할지 여부 판단도 중요한 것 같다.

스프레드 문법

하나로 뭉쳐 있는 여러 값들의 집합을 펼쳐서 개별적인 값들의 목록으로 만들어 주는 역할은 하도록 도입된 스프레드 문법이 있다.

스프레드 문법을 사용할 수 있는 대상으론 배열,문자열,Map,Set 등과 같이 for ...of 문으로 가능한 이터러블로 한정된다.

스프레드 문법은 결과물을 변수에 저장해서 사용할 수 없다.

const list = ...[1,2,3];
console.log(list); // SyntaxError
  • 함수 호출문의 인수 목록에서 사용하기

간단한 예를 들어본다. 배열에 저장된 인수들 중에서 최댓값을 찾고 싶다.

const arr = [1,2,3];
console.log(Math.max(arr)); // Nan;

배열을 인수로 전달하면 최대값을 구할 수 없다. 이때 스프레드 문법을 이용하여 1,2,3으로 펼쳐서 인수로 전달해준다.

const arr = [1,2,3];
const max = Math.max(...arr);
console.log(max); // 3
  • 배열 리터럴 내부에서 사용하는 경우

기존 메서드로 나타냈던 것들을 좀 더 가독성 좋고 효율적으로 해결할 수 있게 되었다.

concat

// ES5
let arr = [1,2].concat([3,4]);
// ES6
let arr = (...[1,2],...[3,4]);

배열 복사

const origin = [1,2];
const copy = [...origin];

0개의 댓글