언어/자바스크립트

[Javascript] array 관련 함수

SuhyeokRoh 2024. 6. 4. 18:48

새로운 Array 생성

1. 값이 정해지지 않은 배열 생성하기

let arr1 = [];
let arr2 = new Array();

console.log(arr1);
// Expected output : Array []
console.log(arr2);
// Expected output : Array []

 

대괄호('[]')를 이용하거나 Array() 생성자 함수를 통해 새로운 배열을 생성할 수 있다.

Javascript에서는 배열의 크기가 동적으로 변경될 수 있기에 인덱스로 배열 내에 요소를 추가할 수 있으며 값이 지정되지 않은 인덱스의 경우, undefined의 값이 출력된다.

 

2. 초기 배열의 크기를 지정한 배열 생성하기

let arr3 = [,,,];
let arr4 = new Array(4);

console.log(arr3);
// Expected output : Array [undefined, undefined, undefined]
console.log(arr4);
// Expected output : Array [undefined, undefined, undefined, undefined]

대괄호 내부의 쉼표의 개수나  Array() 생성자 내에 숫자를 입력함으로 초기 배열의 크기를 지정할 수 있다.

 

3. 특정 요소로 채워진 배열 생성 - fill() 함수

let arr5 = [,,,,,].fill("x");
let arr6 = Array(6).fill(0);

console.log(arr5);
// Expected output : Array ["X", "X", "X", "X", "X"]
console.log(arr6);
// Expected output : Array [0, 0, 0, 0, 0, 0]

fill() 함수를 통해 생성한 배열에 원하는 값으로 배열을 채울 수 있다.

 

3-1. 인덱스에 따라 변하는 값을 갖는 배열 생성

const arr7 = Array(10).fill().map((arr, i) => i);
const arr8 = Array.from(new Array(10), (x,i) => (i+1) * 2);

console.log(arr7);
// Expected output : Array [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(arr8);
// Expected output : Array [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

fill() 함수와 map(콜백함수()) 함수를 사용하여 두 번째 인자를 사용하여 해당 인덱스를 값으로 갖도록 하거나

from(배열, 매핑함수()) 함수를 통해 값을 설정할 수 있다.

 

4. 기존의 배열로 새로운 배열 생성 - map() 함수

const array1 = [1, 4, 9, 16];

// Pass a function to map
const map1 = array1.map((x) => x * 2);

console.log(map1);
// Expected output: Array [2, 8, 18, 32]

기존 배열 요소들에 주어진 함수를 실행한 결과를 통해 새로운 함수를 생성

사용한 기존 배열은 map() 함수로 변경되지 않음

특정 요소 찾기

1. find()

const array1 = [5, 12, 8, 130, 44];

const found = array1.find((element) => element > 10);

console.log(found);
// Expected output: 12

배열의 각 요소를 돌며 콜백함수를 실행해 조건에 부합한 첫 번째 요소를 반환하는 함수

콜백함수에 부합한 요소가 없다면 undefined를 반환한다.

2. some() 

const array = [1, 2, 3, 4, 5];

// Checks whether an element is even
const even = (element) => element % 2 === 0;

console.log(array.some(even));
// Expected output: true

배열의 각 요소를 돌며 조건에 부합한 요소가 적어도 하나가 있는지 확인하는 함수로 있다면 true를, 없으면 false를 반환

3. findIndex() 

const array1 = [5, 12, 8, 130, 44];

const isLargeNumber = (element) => element > 13;

console.log(array1.findIndex(isLargeNumber));
// Expected output: 3

배열의 각 요소를 돌며 조건에 부합하는 첫 번째 요소의 인덱스를 반환하는 함수

만족하는 요소가 없다면 -1를 반환한다.

4. indexOf() 

const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

console.log(beasts.indexOf('bison'));
// Expected output: 1

배열 내에 주어진 요소와 일치하는 첫 번째 인덱스를 반환하는 함수

만족하는 요소가 없다면 -1를 반환한다.

findIndex()는 내부에 찾고자 하는 요소의 판별 함수를, indexOf()는 내부에 찾고자 하는 요소를 넣는다는 차이점이 있다.

5. includes()  

const array1 = [1, 2, 3];

console.log(array1.includes(2));
// Expected output: true

배열 내에 주어진 요소가 포함되어 있다면 true를, 없다면 false를 반환하는 함수

indexOf() 함수와 includes() 함수는 삼중등호비교(===)를 통해 요소들을 비교한다("3"과 3, 0과 false는 false 값을 반환)

 

Array 수정

1. slice(begin, end)

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2));
// Expected output: Array ["camel", "duck", "elephant"]

주어진 배열의 begin부터 end까지 복사본을 만들어 새로운 배열을 생성하는 함수로 기존 함수는 변경되지 않음

begin : 추출 시작점을 의미하며 정의되지 않은 경우 0부터 시작하며 배열의 크기보다 큰 값일 경우, 빈 배열을 반환함

end : 추출 종료점을 의미하며 해당 인덱스는 포함되지 않는다. end가 정의되지 않거나 배열의 크기보다 큰 값일 경우, 배열의 끝까지 출력함

2. splice(start, deleteCount, opt(item1, item2, ...))

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// Inserts at index 1
console.log(months);
// Expected output: Array ["Jan", "Feb", "March", "April", "June"]

배열의 기존 요소를 삭제하거나 새로운 요소를 추가하여 배열을 변경하는 함수

start : 변경을 시작할 배열의 인덱스를 의미하며 음수 값도 설정 가능함

deleteCount : 배열에서 제거할 요소 개수를 의미하여 생략하거나 시작 위치부터 마지막 요소까지의 길이보다 크면 모든 요소를 삭제한다. 0보다 작으면 삭제하지 않으나 이때에는 새로운 요소를 지정해야 함

opt(item1, item2, ...) : 배열에 새롭게 추가할 요소를 의미하여 없는 경우 요소를 추가하지 않음

Array 순회

1. forEach(callback)

const array1 = ['a', 'b', 'c'];

array1.forEach((element) => console.log(element));
// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

각 배열 요소를 돌며 제공된 함수를 실행하는 함수

2. reduce(callback)

const array1 = [1, 2, 3, 4];

// 0 + 1 + 2 + 3 + 4
const initialValue = 0;
const sumWithInitial = array1.reduce(
  (accumulator, currentValue) => accumulator + currentValue,
  initialValue,
);

console.log(sumWithInitial);
// Expected output: 10

 

배열의 각 요소에 대해 주어진 리듀서 함수를 실행하고, 하나의 결과값을 반환하는 함수

리듀서 함수는 누산기, 현재 값, 현재 인덱스, 원본 배열 4개의 인자를 가짐

리듀서 함수의 반환 값이 누산기에 할당되고, 누산기는 순회 중 유지되어 최종적으로 하나의 값을 가짐