Javascript

[Dseok의 코딩스터디] javascript / javascript findIndex() Method / 자바스크립트 findIndex() / Array.prototype.findIndex()

Dseok 2023. 7. 31. 23:09
반응형
SMALL

findIndex()에 대해서 알아보자.

findIndex()는 find(), indexOf()에서 진화한 버전이다.

인수에 함수를 받을 수 있다.

 

우선 MDN의 설명을 보자.

 

findIndex()
메서드는 주어진 판별 함수를 만족하는 배열의 첫 번째 요소에 대한 인덱스를 반환합니다. 만족하는 요소가 없으면 -1을 반환합니다.

하위에 더 복잡한 설명이 있는데 제외 하겠다.

오히려 더 헷갈릴 듯 하다.

 

내가 이해한 findIndex()메소드.

조건에 맞는 놈 찾아 다니다가 처음으로 조건에 맞는 놈 위치 값 알려주고, 조건에 맞는 놈이 없으면 -1로 없다고 알려준다.

 

findIndex()의 기본 문법을 보자.

arr.findIndex(callbackFn, thisArg)

callbackFn: findIndex()메소드는 함수를 인자를 받는다.

thisArg: 이건 옵션이다. 인자로 받은 함수를 실행 할 때 this로 받을 값이다.

 

자 이제 백문이불여일타.

예제를 보자.

 

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

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

console.log(array1.findIndex(isLargeNumber));
// 결과값: 3

MDN의 가벼운 예제이다.

isLargeNumber() 함수에서 13보다 큰 값이 처음 발견 될 때 위치 값을 구한다.

 

const fruits = ['apple', 'banana', 'orange', 'grapes'];
const index = fruits.findIndex(fruit => fruit === 'orange');
// index는 2 (orange의 인덱스)

문자열도 가능하다. 위 예제는 함수로 따로 빼지 않고 바로 넣어봤다.

 

const users = [
  { id: 1, name: 'Alice', age: 25 },
  { id: 2, name: 'Bob', age: 30 },
  { id: 3, name: 'Charlie', age: 22 }
];

const searchName = 'Bob';
const index = users.findIndex(user => user.name === searchName);
console.log(index); // Output: 1 (Bob의 인덱스)

물론 객체에서도 사용이 가능하다.

객체에서 가능하다는 뜻은 JSON 데이터를 다룰 수 있다는 말과 비슷하다.

 

findIndex()메소드를 통해서 실제로 구현을 해보자.

TodoList에서 항목을 삭제 할 수 있는 예시를 만들어 볼 수 있다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="keywords" content="basic" />
    <meta name="description" content="basic" />
    <link rel="shortcut icon" href="" />
    <link rel="stylesheet" href="./css/reset.css">
    <link rel="stylesheet" href="./css/index.css">
    <title>basic</title>
</head>
<body>
    <h1>To-Do List</h1>
    <ul id="todoList">
        <li>Task 1 <button class="deleteButton">Delete</button></li>
        <li>Task 2 <button class="deleteButton">Delete</button></li>
        <li>Task 3 <button class="deleteButton">Delete</button></li>
    </ul>
    <script src="./js/jquery-3.6.0.min.js"></script>
    <script src="./js/index.js"></script>
</body>
</html>

 

@charset "UTF-8";
body {
  font-family: Arial, sans-serif;
  margin: 20px;
}

h1 {
  text-align: center;
}

ul {
  list-style: none;
  padding: 0;
}

li {
  margin-bottom: 10px;
}

.deleteButton {
  background-color: red;
  color: #fff;
  border: none;
  padding: 5px 10px;
  cursor: pointer;
}

css코드는 대충 만들었다.

 

const todoList = document.getElementById('todoList');

todoList.addEventListener('click', (event) => {
  if (event.target.classList.contains('deleteButton')) {
    const taskToDelete = event.target.parentElement;
    const tasks = Array.from(todoList.children);
    const index = tasks.findIndex(task => task === taskToDelete);
    if (index !== -1) {
      taskToDelete.remove();
    }
  }
});

 

 

자 이렇게 오늘은 findIndex()에 대해서 알아보았다.

나도 많이 사용을 해서 익숙하게 만들 필요가 있어보인다.

 

틀리거나 부족한 부분이 있으면 댓글로 설명을 달아주라...ㅠ

제발....

반응형
LIST