Tengo una variedad de objetos en el estado. El objeto tiene la propiedad order. Necesito apoyo de orden para arrastrar y soltar. La lista está ordenada por orden. Además, hay una función para eliminar un elemento de la lista. ¿Cómo eliminar correctamente un elemento de una matriz con la actualización de la propiedad de pedido?
const deleteTodo = (id) => { //I tried using map but it doesn't work setTodos(todos.map((todo, index) => { if (todo.id !== id) { return { ...todo, order: index + 1 } } return todo })) } /* for example: [{title: 'apple', order: 1}, {title: 'banana', order: 2}, {title: 'pear', order: 3}] => delete banana => [{title: 'apple', order: 1}, {title: 'pear', order: 2}] */Escribí esta solución basada en las opciones sugeridas:
const deleteTodo = (id) => { const newTodos = todos .filter(todo => todo.id !== id) .map((todo, index) => ({ ...todo, order: index + 1 })) setTodos(newTodos) } const items = [{ title: 'apple', order: 1 }, { title: 'banana', order: 2 }, { title: 'pear', order: 3 }] //Delete {title: 'banana', order: 2} const newItems = items.filter(el => el.title !== "banana").map(el => el.order > 2 ? ({ ...el, order: el.order - 1 }) : el) console.log(newItems)Debe filtrar la matriz que no tiene la identificación específica y asignar su orden más tarde
const deleteTodo = (id) => { const newTodos = todos.filter(todo => todo.id !== id) newTodos.map((todo, index) => { return { ...todo, order: index } }) setTodos(newTodos) }Esta función obtendrá el resultado que está buscando pero no con la eliminación. Vuelvo a crear la matriz con los objetos excluyendo el que desea eliminar y les doy el nuevo orden.
const data = [{title: 'apple', order: 1}, {title: 'banana', order: 2}, {title: 'pear', order: 3}]; function removeObjectAndReorder(data, orderToRemove){ let result = []; let counter = 0; for (let i = 0; i < data.length; i++){ if (i+1 !== orderToRemove){ result.push({ 'title': data[i].title, 'order': ++counter, }) } } return result; } console.log(removeObjectAndReorder(data,2)); // Remove banana (order = 2)