개발공부/Vue.js

[Vue.js] 💡알아두면 좋은 Javascript 배열 함수들 (map, filter, forEach 등)

스푼앤포크 2024. 8. 14. 00:42

1. map 

배열의 각 요소에 대해 주어진 함수를 실행한 결과를 새로운 배열로 반환

let array = [1, 2, 3];
let newArray = array.map((element) => element * 2);
console.log(newArray); // 출력: [2, 4, 6]

 

새로운 형태로도 바꿀 수 있는데 많이 쓰이는 유형 중 JSON 형태가 있음

array.map((item,index)=>{
    return {
        "number":item,
        "idx":index
    }
});

2. filter

배열의 각 요소에 대해 주어진 함수의 조건을 만족하는 요소들로만 이루어진 새로운 배열을 반환

const array = [1, 2, 3, 4];
const evenNumbers = array.filter((element) => element % 2 === 0);
console.log(evenNumbers); // 출력: [2, 4]

3. forEach

배열의 각 요소에 대해 주어진 함수를 실행(for문과 매우 유사함)

const array = [1, 2, 3];
array.forEach((element) => console.log(element));
// 출력: 1, 2, 3

 

** 필요에 따라 map이나 filter와 조합해서 종종 사용한다.

 

🖇️ map X forEach 예제 :

배열의 모든 요소를 변환한 다음, 변환된 값들로 무언가를 처리하는 예시

const array = [1, 2, 3, 4];
const doubledArray = array.map((element) => element * 2);

doubledArray.forEach((element) => {
  console.log(`Doubled value: ${element}`);
});

// 출력:
// Doubled value: 2
// Doubled value: 4
// Doubled value: 6
// Doubled value: 8

 

🖇️ filter X forEach 예제 :

특정 조건에 맞는 요소만 추출하고, 그 요소들에 대해 추가 작업을 수행

const array = [1, 2, 3, 4, 5, 6];
const evenNumbers = array.filter((element) => element % 2 === 0);

evenNumbers.forEach((element) => {
  console.log(`${element} is even`);
});

// 출력:
// 2 is even
// 4 is even
// 6 is even

4. includes

배열에 특정 요소가 포함되어 있는지 여부를 확인하여 true 또는 false를 반환

const array = [1, 2, 3, 4];
const includesThree = array.includes(3);
console.log(includesThree); // 출력: true

 


5. slice

배열의 일부를 추출하여 새로운 배열로 반환( 원본 배열 변경 X )

array.slice(start, end);

 

  • start : 추출을 시작할 위치
  • end : 추출을 종료할 위치 (but, end에 해당하는 요소는 포함 X)

 

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

// 배열의 2번째부터 4번째 요소까지 추출 (index 1부터 3까지)
const slicedArray = array.slice(1, 4);

console.log(slicedArray); // 출력: [2, 3, 4]
console.log(array);       // 출력: [1, 2, 3, 4, 5] (원본 배열은 변경되지 않음)

 


6. splice

배열의 요소를 추가, 제거 또는 교체하여 배열을 변경( 원본 배열 변경 O ) 

array.splice(start, deleteCount, item1, item2, ...);

 

- splice는 최소 두 개의 인자를 전달받음 : start와 deleteCount.

  • start: 배열에서 변경을 시작할 위치
  • deleteCount: 제거할 요소의 개수 지정 (추가적으로, deleteCount 이후에 새롭게 추가할 요소들을 인자로 전달 가능)
  • 삭제 없이 요소 추가하려면 deleteCount를 0으로 설정
const array = [1, 2, 3, 4, 5];

// 배열의 2번째 요소부터 2개의 요소를 제거하고, 그 자리에 6과 7을 추가
const removedItems = array.splice(1, 2, 6, 7);

console.log(array);       // 출력: [1, 6, 7, 4, 5] (원본 배열이 변경됨)
console.log(removedItems); // 출력: [2, 3] (제거된 요소들)

 

예시#1) 요소 삭제 

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

// 배열의 3번째 요소 하나를 삭제
const removedItem = array.splice(2, 1);

console.log(array);       // 출력: [1, 2, 4, 5] (3이 삭제됨)
console.log(removedItem); // 출력: [3]

 

예시#2) 요소 추가

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

// 배열의 2번째 위치에 9와 10을 추가 (삭제하지 않음)
array.splice(1, 0, 9, 10);

console.log(array); // 출력: [1, 9, 10, 2, 3, 4, 5]

 


7. some

배열에서 하나 이상의 요소가 주어진 조건을 만족하면 true를 반환

const array = [1, 2, 3, 4];
const hasEvenNumber = array.some((element) => element % 2 === 0);
console.log(hasEvenNumber); // 출력: true

8. every

배열의 모든 요소가 주어진 조건을 만족하면 true를 반환

const array = [2, 4, 6];
const allEvenNumbers = array.every((element) => element % 2 === 0);
console.log(allEvenNumbers); // 출력: true

9. find

주어진 조건을 만족하는 첫 번째 요소를 반환. 없으면 undefined를 반환

const array = [1, 2, 3, 4];
const found = array.find((element) => element > 2);
console.log(found); // 출력: 3

 


10. reduce

배열을 순회하며 누적된 결과를 반환. 주로 배열의 모든 값을 합치거나, 복잡한 데이터를 축약하는 데 사용

* 합계, 평균, 최대값/최소값 찾기, 객체 배열의 필드 누적, 중복 제거, 데이터 그룹화 등 다양한 작업 수행 가능

const array = [1, 2, 3, 4];
const sum = array.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 출력: 10

 

  • accumulator :  각 반복에서 현재까지의 합 저장
  • currentValue:  현재 요소의 값
  • initialValue: 0이므로 accumulator는 첫 번째 반복에서 0부터 시작

예시#1) 배열의 최대값 찾기

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

const max = numbers.reduce((accumulator, currentValue) => {
  return Math.max(accumulator, currentValue);
}, 0);

console.log(max); // 출력: 5

 

 

 

  • Math.max를 사용하여 각 요소를 비교하며 최대값 찾기
  • accumulator는 현재까지의 최대값을 저장하고, currentValue와 비교하여 더 큰 값을 반환

예시#2) 객체배열에서 값 누적하기

const products = [
  { name: "Laptop", price: 1000 },
  { name: "Phone", price: 500 },
  { name: "Tablet", price: 700 }
];

const totalPrice = products.reduce((accumulator, product) => {
  return accumulator + product.price;
}, 0);

console.log(totalPrice); // 출력: 2200

 

 

예시#3) 배열 요소 중복 제거

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

const uniqueArray = array.reduce((accumulator, currentValue) => {
  if (!accumulator.includes(currentValue)) {
    accumulator.push(currentValue);
  }
  return accumulator;
}, []);

console.log(uniqueArray); // 출력: [1, 2, 3, 4, 5]

 

예시#4) 객체 배열 그룹화하기

const people = [
  { name: "Alice", age: 21 },
  { name: "Bob", age: 25 },
  { name: "Charlie", age: 21 },
  { name: "David", age: 25 }
];

const groupedByAge = people.reduce((accumulator, person) => {
  if (!accumulator[person.age]) {
    accumulator[person.age] = [];
  }
  accumulator[person.age].push(person);
  return accumulator;
}, {});

console.log(groupedByAge);
// 출력:
// {
//   21: [{ name: "Alice", age: 21 }, { name: "Charlie", age: 21 }],
//   25: [{ name: "Bob", age: 25 }, { name: "David", age: 25 }]
// }