프로그래밍 언어/JavaScript

[JavaScript] 배열 메소드(Array Method) - 1

민졈 2022. 2. 26. 18:49

이번 시간에는 배열에서 사용하는 메소드에 대해 공부할 것이다.

 

push( ) : 뒤에 삽입

pop( ) : 뒤에 삭제

unshift( ) : 앞에 삽입

shift( ) : 앞에 삭제

 

배열에서 사용하는 기본적인 메소드로는 위의 네개가 있는데 더 유용한 메소드에 대해 배워보도록 하자.

 

 

1. arr.splice(n, m)

: 특정 요소 지우기, n 번째부터 m 개의 요소를 지우라는 메소드이다.

인덱스는 0부터 시작이기 때문에 해당하는 인덱스부터 m개를 지울 수 있다.

let arr = [1,2,3,4,5];
arr.splice(1,2);

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

 

arr.splice(n, m, x)를 사용하면 특정 요소를 지우고 추가도 할 수 있다.

let arr = [1,2,3,4,5];
// 인덱스 1번부터 2, 3, 4를 지운다. 그렇게 되면 1, 5가 남게 되는데 지웠던 인덱스에 순서대로 100, 200 을 넣어준다.
arr.splice(1, 3, 100, 200);

// 3개를 지우고 2개를 추가했기 때문에 최종적으로 4개의 요소를 가진 배열이 된다.
console.log(arr);   // [1, 100, 200, 5]

 

그렇다면 중간에 m 개수를 나타내는 부분에 0을 사용하면 어떻게 될까?

 

let content = ["나는", "영수", "입니다"];

arr.splice(1, 0, "대한민국", "경찰관");

console.log(content);   // ["나는", "대한민국", "경찰관", "영수", "입니다"]

 

위의 코드를 보면 알 수 있듯이 아무 요소도 지우지 않고 인덱스 0번부터 1번 사이에 추가할 수가 있다.

 

 

특정 요소를 넣지 않고 splice( ) 를 사용하면 삭제된 요소를 반환해준다.

let arr = [1,2,3,4,5];

let result = arr.splice(1, 2);

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

console
.log(result);    //[2, 3]

이렇게 1, 2를 삭제한 결과가 result라는 배열에 들어가는 것을 알 수 있다.

 

 

 

 

 

 

String에서도 문자열을 나눠가져오는 slice( ) 메소드가 있었는데 배열도 똑같이 slice( ) 메소드가 있다.

 

2. arr.slice(n, m)

: n부터 m까지 반환 ( m 포함하지 않는다 )

m을 쓰지 않으면 n부터 끝까지를 반환한다.

let arr = [1,2,3,4,5];

arr.slice(1,4); //  [2,3,4]

 

 

만약 괄호 안에 아무것도 넣지 않는다면 배열이 복사된다.

let arr = [1, 2, 3, 4, 5];

let arr2 = arr.slice();

console.log(arr2);  //[1, 2, 3, 4, 5]

 

 

 

 

3. arr.concat(arr2, arr3..)

: 기존에 있던 arr에 다른 배열을 합쳐서 새 배열을 반환한다.

concat으로 다른 두 배열을 넘기거나 하나는 배열, 배열이 아닌 요소들을 같이 넘겨줘도 모두 합친 새 배열이 만들어진다.

let arr = [1, 2];

arr.concat([3,4]);  //[1, 2, 3, 4]
arr.concat([3,4], [5,6]);  //[1, 2, 3, 4, 5, 6]
arr.concat([3,4], 5, 6);  //[1, 2, 3, 4, 5, 6]

 

 

 

 

 

4. arr.forEach(fn)

: 배열 반복

let users = ["Jane", "Alex", "Christina"];

users.forEach((item, index, arr) => {
    //...
});

 

forEach는 함수를 사용하고 그 함수는 세개의 메개변수를 받는데 첫번째는 그 함수의 요소이고

두번째는 index, 세번째는 해당 배열 자체를 의미한다.

 

 

보통 첫번째와 두번째 인수만 사용한다.

let users = ["Jane", "Alex", "Christina"];

users.forEach((name, index) => {
    console.log(name);  // Jane, Alex, Christina
    console.log(`${index}, ${name}`);   // 0. Jane, 1.Alex, 2.Christina
    console.log(`${index + 1}${name}`);   // 1. Jane, 2.Alex, 3.Christina
});

 

 

 

 

 

 

5. arr.indexOf( ) / arr.lastIndexOf( )

: 문자열에서 사용했던 indexOf와 사용법이 같다.

( ) 안에 들어가는 요소의 index를 반환해주는 메소드이다.

 

(n, m)으로 사용한다면 m은 시작 위치를 나타낸다.

 

 

lastIndexOf( ) 는 끝에서부터 찾는 메소드이다.

let indexes = [1,2,3,4,5,1,2,3];
arr.indexOf(3); // 2

// index 3번부터 시작해서 3을 찾으라고 했기 때문에 맨 마지막인 7번째에 위치하는 3을 찾아 인덱스 7을 반환해준다.
arr.indexOf(3, 3); // 7

 

 

 

 

 

6. arr.includes( )

: 인덱스 번호를 알 필요 없이 그냥 요소를 포함하고 있는지 확인할 때 사용하는 메소드이다.

true와 false로 반환한다.

let arr = [1, 2];

arr.includes(2);    // true
arr.includes(4);    // false

 

 

 

 

 

 

7. arr.find(fn) / arr.findIndex(fn)

: find( )는 indexOf 처럼 어떤 요소들을 찾는 메소드이지만

복잡한 연산식을 사용할 수 있는 함수를 넣을 수 있는 메소드이다.

findIndex( )는 인덱스가 있는지를 확인하는 메소드이다.

 

주의할 점은 두 메소드 모두 찾으려고 하는 인수가 여러개가 있어도 첫번째 true 값만 반환한다.

만약 그 값이 없다면 undefined를 반환한다.

 

 

아래는 짝수를 찾는 함수를 넣은 find 메소드이다.

 

let arr = [1, 2, 3, 4, 5];

const result = arr.find((item) => {
    return item % 2 === 0;
});

console.log(result);    // 2

item % 2 === 0으로 짝수인 요소를 찾는데 arr 의 1~5까지의 숫자 중 짝수인 조건을 만족하는 숫자는 2이다.

 

find( )는 첫번째 true 값만 반환하기 때문에 result의 값은 2만 반환이 되는 것이다.

 

 

 

 

객체에서 특정한 조건을 가진 요소를 찾을 때에도 find를 사용한다.

let userList = [
    {name: "Mike", age: 30},
    {name: "Alex", age: 23},
    {name: "Jane", age: 12}
];

const result = userList.find((user) => {
    if(user.age < 19) {
       return true;
    }
   // 19세보다 많으면 반환하지 않는다.
    return false;
});

console.log(result);    // {name: "Jane", age: 12}


조건에 해당하는 요소의 index를 찾는 findIndex( )
const result = userList.findIndex((user) => {
    if(user.age < 19) {
       return true;
    }
   // 19세보다 많으면 반환하지 않는다.
    return false;
});


console.log(result);    // 2

 

 

 

 

find로는 조건에 만족하는 요소 딱 한개만 찾을 수 있었는데,

조건을 만족하는 모든 요소를 반환하는 메소드는 무엇일까?

 

 

바로 filter( ) 메소드이다.

 

 

8. arr.filter(fn)

: 만족하는 모든 요소를 배열로 반환한다.

위의 짝수를 찾는 예제에서 find를 filter로 바꿔 사용하면 어떻게 될까?

let arr = [1, 2, 3, 4, 5, 6, 7, 8];

const result = arr.filter((item) => {
    return item % 2 === 0;
});

console.log(result);    // 2, 4, 6, 8

짝수에 해당하는 모든 요소 2, 4, 6, 8이 반환되는 것을 알 수 있다.

 

 

 

 

 

9. arr.reverse( )

: 배열을 역순으로 재정렬해주는 메소드이다. 사용법은 간단하다.

가입한 유저들을 최신 순으로 보여준다거나, 최신 게시물을 먼저 보여주려 할 때 많이 쓰인다.

let arr = [1, 2, 3, 4, 5];

arr.reverse();  // [5,4,3,2,1]

 

 

 

 

10. arr.map(fn)

: 함수를 받아 특정 기능을 시행하고 새로운 배열을 반환하는 메소드이다.

 

원래 있던 userList 객체에 이 user가 성인인지 판단하는 요소를 추가해서 새로운 객체를 만들어보자.

let userList = [
    {name: "Mike", age: 30},
    {name: "Alex", age: 23},
    {name: "Jane", age: 12}
];

let newUserList = userList.map((user,index) => {
    return Object.assign({}, user, {
        id : index + 1,
        isAdult : user.age > 19
    });
});

console.log(newUserList);  
/* 0: {name: "Mike", age: 30, isAdult: true}  
   1: {name: "Alex", age: 23, isAdult: true}
   2: {name: "Jane", age: 12, isAdult: false}
*/

 

기존에 있던 userList를 확인해보면 변경사항이 없는 것을 알 수 있다.

console.log(userList);
/*
    0: {name: "Mike", age: 30},
    1: {name: "Alex", age: 23},
    2: {name: "Jane", age: 12}
*/

 

map은 실전에서 많이 쓰이는 함수이니 여러가지 예제들을 많이 풀어보는 편이 좋겠다!

 

(실제로 본인도 실무에서 map 사용을 자주 하는 편이다.)

 

 

 

11. join( ) , split( )

:  join( )을 사용하면 배열을 합쳐서 문자열로 만들 수 있다.

괄호 안에는 기본적으로 전달해주는 값이 있는데 이것은 ,(콤마)이다.

괄호 안에 아무것도 전달하지 않으면 기본 값이 전달 되기 때문에 아래와 같은 결과가 반환된다.

let arr = ["안녕", "나는", "철수야"];

let result = arr.join();

console.log(result);    // 안녕,나는,철수야

 

때문에 기본 값을 구분자으로 주지 않으려면 join("  ") 공백이나 다른 값들을 넣어주면 된다.

let arr = ["안녕", "나는", "철수야"];

let result = arr.join("  ");

console.log(result);    // 안녕  나는  철수야

 

 

반대로 split( )은 문자열을 나누어서 배열로 만들어준다.

join과 다르게 괄호 안에는 구분자를 정해주어야한다.

const users = "Mike,Jamie,Alex,Tony";

const result = users.split(",");

console.log(result);    // ["Mike","Jamie","Alex","Tonu"]

 

 

 

 

12. arr.isArray( )

: 배열인지 아닌지 확인할 때 사용하는 메소드이다.

let user = {
    name: "Mike",
    age: 30,
};

let userList = ["Mike","Tony","Jamie"];

console.log(typeof user);   // object
console.log(typeof userList);   // object

객체인 user와 user들을 담고 있는 userList의 type을 살펴보면 둘 다 object로 나오기 때문에

어느것이 객체이고 어느 것이 배열인지 확인하기가 어렵다.

 

이럴 때 사용하는 메소드가 isArray 인 것이다.

 

isArray( )를 사용해보면 객체인 user는 false가 반환되고 배열인 userList는 true가 반환되는 것을 볼 수 있다.

console.log(Array.isArray(user));   // false
console.log(Array.isArray(userList));   // true

 

 

 

이번 시간에는 간단한 배열에 관련된 메소드를 배워봤다.

다음 시간에는 이어서 배열의 sort(정렬)과 reduce에 대해 배워 볼 것이다.

 

 

 

 

* 본 포스팅은 코딩앙마님의 JavaScript 중급강좌를 기반으로 작성한 글입니다.