findIndex ()를 사용하여 JS에서 선택한 항목의 색인을 찾는 방법은 무엇입니까?

user13670138

JSONPlaceholder를 사용하여 할 일 목록을 만들고 있습니다. 모든 것이 제대로 작동하지만 (적어도 현재는) 선택한을 삭제 <li>하면 다음 항목 <li>이 삭제됩니다.

나는하여했기 때문에 그것이 알고 .splice(id - 1, 1)에서 deleteTodo. 대신 선택한 항목의 ID를 가진 항목의 올바른 인덱스를 가져와야한다는 것을 알고 selectedItem있지만 가져 오는 방법을 모르겠습니다. 아마도 사용해야 할 것 findIndex()같지만 매개 변수로 줄 함수를 생각할 수 없습니다.

어떤 도움을 주시면 감사하겠습니다.

todoList = {
    todos: [],
    removeClick: function (icon) {
        let selectedIndex = icon.parentElement.parentElement.dataset.index;
        todoList.deleteTodo(selectedIndex);
    },
    deleteTodo: function (index) {
        var id = index;
        $.ajax({
            url: `https://jsonplaceholder.typicode.com/todos/${id}`,
            type: 'delete', 
            success: function () {
                todoList.todos.splice(id - 1, 1);
                todoList.displayTodo();
            }
        })
    },
    displayTodo: function () {
        $ul.innerHTML = "";
        let innerContents = '';
        for (let i = 0; i < this.todos.length; i++) {
            let todo = this.todos[i];
            let className = 'completed'
            let checked = 'checked'
            if (todo.completed === false) {
                className = "";
                checked = "";
            }
            innerContents += `
                <li data-index="${todo.id}">
                    <div class="checkboxDiv">
                        <input type="checkbox" class="checkbox" data-key="checkbox"
                               ${checked} />
                    </div>
                    <div class="contents ${className}" data-key="contents">
                        ${todo.title}
                    </div>
                    <div class="icondiv">
                        <i class="far fa-edit" data-key="icon_edit"></i>
                        <i class="far fa-trash-alt" data-key="icon_trash"></i>
                    </div>
                </li>
            `;
        }
        $ul.innerHTML = innerContents;
    }
};
todoList.getData(); 
$ul.addEventListener('click', (e) => {
    switch (e.target.dataset.key) {
        case "icon_trash":
            todoList.removeClick(e.target);
            break;
    }
});
Sivakumar Tadisetti

해결책:

참고 : 코드 스 니펫 아래에서 코드 관련 문제를 설명했습니다.

삭제 된 항목으로 데이터를 간단히 필터링 할 수 있습니다.

todoList.todos = todoList.todos.filter(({id: todoID}) => todoID !== id); 

또는

todoList.todos.splice(todoList.todos.findIndex(({id: todoID}) => todoID == id), 1);

id - 1배열 인덱스가 아니기 때문에 하지 마세요. todo의 id 값입니다.

휴지통 아이콘 자체에 클릭 이벤트 추가

<i class="fa fa-trash" data-key="icon_trash" onclick="todoList.removeClick(this)"></i></div>

아래는 작동 코드 스 니펫입니다 (스크립트에 많은 오류가 있습니다. 어떻게 작동하는지 모르겠습니다.))

var $ul = $('ul');

todoList = {

  todos: [],

  removeClick: function(element) {
    let id = $(element).parent().parent().data('index');
    todoList.deleteTodo(id);
  },


  deleteTodo: function(id) {
    $.ajax({
      url: `https://jsonplaceholder.typicode.com/todos/${id}`, //
      type: 'delete',
      success: function() {
        // todoList.todos = todoList.todos.filter(({id: todoID}) => todoID !== id);
        todoList.todos.splice(todoList.todos.findIndex(({id: todoID}) => todoID == id), 1);
        todoList.displayTodo();
      }
    })
  },

  getTodos: function() {
    $.ajax({
      url: `https://jsonplaceholder.typicode.com/todos/`, //
      type: 'get',
      success: function(data) {
        todoList.todos = data;
        todoList.displayTodo();
      }
    })
  },

  displayTodo: function() {
    $ul.innerHTML = "";
    let innerContents = '';
    for (let i = 0; i < todoList.todos.length; i++) {
      let todo = todoList.todos[i];
      let className = 'completed'
      let checked = 'checked'
      if (todo.completed === false) {
        className = "";
        checked = "";
      }
      innerContents += `<li data-index="${todo.id}"><div class="checkboxDiv">
                             <input type="checkbox" class="checkbox" data-key="checkbox" ${checked}/></div>
                             <div class="contents ${className}" data-key="contents">
                             ${todo.title}</div>
                             <div class="icondiv"><i class="fa fa-edit" data-key="icon_edit"></i>
                             <i class="fa fa-trash" data-key="icon_trash" onclick="todoList.removeClick(this)"></i></div>
                             </li>`

    }

    $ul.html(innerContents);

  },

}

todoList.getTodos();
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul></ul>

문제 : 아래의 객체 배열 고려

[{id: 1, name: 'name 1'},{id: 2, name: 'name 2'},{id: 3, name: 'name 3'},{id: 4, name: 'name 4'}]

코드로 todoList.todos.splice(id - 1, 1);

ID가 2 인 항목을 삭제하자 (이름 = '이름 2')는 todoList.todos.splice(2 - 1(1), 1);. 따라서 인덱스 1에서 항목을 올바르게 삭제하고 새 개체는

[{id: 1, name: 'name 1'},{id: 3, name: 'name 3'},{id: 4, name: 'name 4'}]

이제 ID가 3 (name = 'name 3') 인 항목을 삭제하겠습니다 todoList.todos.splice(3 - 1(2), 1);.

여기에 코드 문제가 있습니다. 이제 인덱스 2에있는 항목이 삭제 {id: 4, name: 'name 4'}되고 새 개체가

[{id: 1, name: 'name 1'},{id: 3, name: 'name 3'}]

설명:

findIndex(({id: todoID}) => todoID == id)
  • ES6 Object destructuring 기능을 사용했습니다.
  • 대신 전체 액세스 todo에서 객체를 findIndex, 난 그냥 단지 잡고 있어요 id에서 속성을 todo객체와로 이름을 변경todoID
  • 메서드에 대한 매개 변수로 얻는 것과 구별 id하기 todoID위해 로 이름 변경 했습니다.iddeleteTodo
  • 비교 Atlast todoID으로 id이는 deleteTodo방법의 매개 변수
  • 비교가 성공 하면 객체를 findIndex반환 합니다.indextodo
  • 따라서 배열에서 Array.splice(<returned index>, 1)제거합니다.todo

없이 Object destructuring하고 arrow function, 코드 외모는 다음과 같은

todoList.todos.splice(todoList.todos.findIndex(function(todo) {
    return todo.id === id;
}), 1);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

QTreeView를 사용하여 선택한 항목에서 항목 값을 얻는 방법은 무엇입니까?

분류에서Dev

확인란을 사용하여 DataGridView에서 선택한 항목의 순서를 제어하는 방법은 무엇입니까?

분류에서Dev

mvvm을 사용하여 목록 상자 wpf에서 선택한 항목의 데이터를 표시하는 방법은 무엇입니까?

분류에서Dev

TestCafe Selector를 사용하여 & lt; select & gt;에서 선택한 항목의 텍스트를 확인하는 방법은 무엇입니까?

분류에서Dev

VB.Net을 사용하여 HTML 다중 선택에서 마지막으로 선택한 항목 또는 색인을 얻는 방법은 무엇입니까?

분류에서Dev

Java를 사용하여 Jtable에서 선택한 확인란 항목을 mysql에 저장하는 방법은 무엇입니까?

분류에서Dev

jquery를 사용하여 다중 선택 드롭 다운 목록에서 선택한 값을 인쇄하는 방법은 무엇입니까?

분류에서Dev

JQuery를 사용하여 동일한 양식 선택 항목에서 여러 값을 추출하는 방법은 무엇입니까?

분류에서Dev

JQuery를 사용하여 동일한 양식 선택 항목에서 여러 값을 추출하는 방법은 무엇입니까?

분류에서Dev

파이썬에서 하나의 print ()를 사용하여 목록 항목을 한 줄이 아니라 한 줄씩 인쇄하는 방법은 무엇입니까?

분류에서Dev

요소 선택에서 선택한 항목 배경색을 설정하는 방법은 무엇입니까?

분류에서Dev

Python 용 gtk3 +에서 선택한 메뉴 항목 또는 메뉴 항목 색인을 선택하는 방법은 무엇입니까?

분류에서Dev

목록 상자에서 선택한 항목의 배경을 변경하는 방법은 무엇입니까?

분류에서Dev

Shiny App의 selectInput ()에서 선택 항목 중 하나를 선택하여 두 개의 테이블을 인쇄하는 방법은 무엇입니까?

분류에서Dev

asp.net에서 jquery를 사용하여 드롭 다운 목록에서 선택한 값 바인딩을 얻는 방법은 무엇입니까?

분류에서Dev

jQuery를 사용하여 메뉴에서 목록 항목의 Z- 색인을 변경하는 방법은 무엇입니까?

분류에서Dev

jQuery를 사용하여 선택한 모든 확인란의 값을 얻는 방법은 무엇입니까?

분류에서Dev

두 개의 스피너를 사용하여 두 항목을 선택한 경우 textView를 설정하는 방법은 무엇입니까?

분류에서Dev

JQ를 사용하여 JSON에서 불필요한 항목을 제거하는 방법은 무엇입니까?

분류에서Dev

jquery 및 webservice를 사용하여 SQL에 의해 바인딩되는 html 테이블에서 선택한 행을 얻는 방법은 무엇입니까?

분류에서Dev

탐색 창에서 선택한 항목 색상을 변경하는 방법은 무엇입니까?

분류에서Dev

탐색 창에서 선택한 항목 색상을 변경하는 방법은 무엇입니까?

분류에서Dev

WinForms의 ComboBox에서 선택한 항목을 중앙 정렬하는 방법은 무엇입니까?

분류에서Dev

dataTable 내의 selectOneMenu에서 선택한 항목을 제거하는 방법은 무엇입니까?

분류에서Dev

Telerik의 RadListView에서 선택한 항목을 제거하는 방법은 무엇입니까?

분류에서Dev

React-Native에서 ListView의 한 항목을 선택하는 방법은 무엇입니까?

분류에서Dev

내 JTable에서 JComboBox의 선택한 항목을 설정하는 방법은 무엇입니까?

분류에서Dev

탐색 창의 recyclerview 항목에서 인 텐트를 사용하여 새 활동 조각을 여는 방법은 무엇입니까?

분류에서Dev

JFileChooser를 사용하여 Java에서 선택한 폴더 이름을 얻는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    QTreeView를 사용하여 선택한 항목에서 항목 값을 얻는 방법은 무엇입니까?

  2. 2

    확인란을 사용하여 DataGridView에서 선택한 항목의 순서를 제어하는 방법은 무엇입니까?

  3. 3

    mvvm을 사용하여 목록 상자 wpf에서 선택한 항목의 데이터를 표시하는 방법은 무엇입니까?

  4. 4

    TestCafe Selector를 사용하여 & lt; select & gt;에서 선택한 항목의 텍스트를 확인하는 방법은 무엇입니까?

  5. 5

    VB.Net을 사용하여 HTML 다중 선택에서 마지막으로 선택한 항목 또는 색인을 얻는 방법은 무엇입니까?

  6. 6

    Java를 사용하여 Jtable에서 선택한 확인란 항목을 mysql에 저장하는 방법은 무엇입니까?

  7. 7

    jquery를 사용하여 다중 선택 드롭 다운 목록에서 선택한 값을 인쇄하는 방법은 무엇입니까?

  8. 8

    JQuery를 사용하여 동일한 양식 선택 항목에서 여러 값을 추출하는 방법은 무엇입니까?

  9. 9

    JQuery를 사용하여 동일한 양식 선택 항목에서 여러 값을 추출하는 방법은 무엇입니까?

  10. 10

    파이썬에서 하나의 print ()를 사용하여 목록 항목을 한 줄이 아니라 한 줄씩 인쇄하는 방법은 무엇입니까?

  11. 11

    요소 선택에서 선택한 항목 배경색을 설정하는 방법은 무엇입니까?

  12. 12

    Python 용 gtk3 +에서 선택한 메뉴 항목 또는 메뉴 항목 색인을 선택하는 방법은 무엇입니까?

  13. 13

    목록 상자에서 선택한 항목의 배경을 변경하는 방법은 무엇입니까?

  14. 14

    Shiny App의 selectInput ()에서 선택 항목 중 하나를 선택하여 두 개의 테이블을 인쇄하는 방법은 무엇입니까?

  15. 15

    asp.net에서 jquery를 사용하여 드롭 다운 목록에서 선택한 값 바인딩을 얻는 방법은 무엇입니까?

  16. 16

    jQuery를 사용하여 메뉴에서 목록 항목의 Z- 색인을 변경하는 방법은 무엇입니까?

  17. 17

    jQuery를 사용하여 선택한 모든 확인란의 값을 얻는 방법은 무엇입니까?

  18. 18

    두 개의 스피너를 사용하여 두 항목을 선택한 경우 textView를 설정하는 방법은 무엇입니까?

  19. 19

    JQ를 사용하여 JSON에서 불필요한 항목을 제거하는 방법은 무엇입니까?

  20. 20

    jquery 및 webservice를 사용하여 SQL에 의해 바인딩되는 html 테이블에서 선택한 행을 얻는 방법은 무엇입니까?

  21. 21

    탐색 창에서 선택한 항목 색상을 변경하는 방법은 무엇입니까?

  22. 22

    탐색 창에서 선택한 항목 색상을 변경하는 방법은 무엇입니까?

  23. 23

    WinForms의 ComboBox에서 선택한 항목을 중앙 정렬하는 방법은 무엇입니까?

  24. 24

    dataTable 내의 selectOneMenu에서 선택한 항목을 제거하는 방법은 무엇입니까?

  25. 25

    Telerik의 RadListView에서 선택한 항목을 제거하는 방법은 무엇입니까?

  26. 26

    React-Native에서 ListView의 한 항목을 선택하는 방법은 무엇입니까?

  27. 27

    내 JTable에서 JComboBox의 선택한 항목을 설정하는 방법은 무엇입니까?

  28. 28

    탐색 창의 recyclerview 항목에서 인 텐트를 사용하여 새 활동 조각을 여는 방법은 무엇입니까?

  29. 29

    JFileChooser를 사용하여 Java에서 선택한 폴더 이름을 얻는 방법은 무엇입니까?

뜨겁다태그

보관