카테고리 없음

[js] 배열 내장 메서드(1)_ slice , splice ✂️, fill

ehddkDEV 2024. 10. 21. 12:52

배열에서 원하는 요소만을 추가하거나 삭제할때 보통 이 두 함수를 많이 쓴다

근데 쓸때마다 헷갈려서 아예 개념을 확실하게 챙겨야겠다! 

 

✂️ slice

배열에서 일 부분을 싹둑 잘라내어 새로운 배열을 반환할때 사용한다.

 

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

const value = arr.slice(1,3);
console.log(value); // [2,3]
console.log(arr); // [1,2,3,4] 원본 배열은 그대로 유지됨!

 

slice(처음요소, 마지막요소) 에서 항상 마지막요소의 인덱스 -1 까지만 추출한다. 

 

ex> 페이지네이션을 구현하는 코드의 어느 한 부분

 async findAllWithPagination({
    offset,
    limit,
  }: {
    offset: number;
    limit: number;
  }): Promise<{
    totalCount: number;
    prev: string | null;
    results: IPost[];
    next: string | null;
  }> {
    const values = Array.from(MemoryPostRepository.store.values());
    return {
      totalCount: values.length,
      results: values.slice(offset, offset + limit),
      prev:
        offset - limit >= 0 ? `?offset=${offset - limit}&limit=${limit}` : null,
      next:
        offset + limit < values.length
          ? `?offset=${offset + limit}&limit=${limit}`
          : null,
    };
  }

 

 

      results: values.slice(offset, offset + limit),

 

values배열에서 offset 요소에서 offset+ limit를 더한 요소의 이전 요소까지만 싹둑 잘라내서 반환!

 

✂️splice

원하는 위치에 요소를 추가하거나 삭제할때 사용한다.

 

1. 삭제

array.splice(삭제 요소, 마지막요소)

삭제 요소의 인덱스부터 마지막요소의 인덱스까지 포함해서 삭제된다.

const arr= [1,2,3,4,5]
arr.splice(2,1); //[3]이 삭제가되겠지.

console.log(arr); // [1,2,4,5]
const arr= [1,2,3,4,5]
arr.splice(2,2); // [3,4]가 삭제가 되겠지

console.log(arr); // [1,2,5]

 

2. 삭제+ 추가

const A = [10,20,30,40]

A.splice(2,2,4,5); //[30,40]이 삭제가 되겠지.
console.log(A); // [10,20,4,5] : 삭제된 [30,40]에 [4,5]가 추가됨.

 

따라서 둘의 큰 차이점은 slice는 원본배열을 변경하지 않고 유지한채 새로운 배열을 반환 하고, 

splice는 원본배열을 변경하고 삭제된 요소를 반환한다! 

 

 

🍯 fill

시작 index부터 마지막 index 전까지 인자로 받은 값으로 채운다!

every( value,start,end)
value: 채울 값
start,end에 아무런 값이 없을 경우엔 default값인 0이 들어간다.

 

const arr =['A','B','C','D']

console.log(arr.fill(2,3)); // ['A','B',3, 3]
 return HttpResponse.json(
      new Array(100).fill(0).map(() => {
        return new UserResponseDTO({
          id: uuid(),
          email: faker.internet.email(),
          role: "user",
          profile: {
            id: uuid(),
            thumbnail: faker.image.avatar(),
            name: faker.person.firstName(),
          },
        });

 

🔎잠깐!  map이란?

arr.map(callback(currentValue, index, array));

배열의 첫 번째 요소부터 마지막 요소까지 하나씩 순회하여 새로운 배열을 반환!

매개변수로 callback함수를 받으며 그 인자에는 현재값, 인덱스, 배열이 들어간다. 이때, 인덱스와 배열은 선택사항이라고 한다!

 

 

[10,20,30].map((v,i) => ( v + i));

//결과: [10, 21, 32]

 v = 배열, i = 인덱스   (0,1,2) 

즉, 새로운 배열을 반환한다! 

 

new Array(100).fill(0).map(() => {}

 

Array의 길이가 100인 배열을 만들어 0으로 꽉 채운 후에 map()을 실행한다.

위 예시로 보면 총 100개의 UserResponseDTO 객체가 담긴 배열을 만들 수 있는 것이다.

이때 fill(0)이 아니라 fill()로 넣으면 undefined로 채워지며 결과값은 똑같다!