Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

194
Vistas
Delete an element from the array and update order

I have an array of objects in the state. The object has the order property. I need order prop for drag and drop. The list is sorted by order. Also, there is a function to remove an item from the list. How to correctly remove an element from an array with updating the order property?

  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}] */

I wrote this solution based on the suggested options:

  const deleteTodo = (id) => {
    const newTodos = todos
      .filter(todo => todo.id !== id)
      .map((todo, index) => ({ ...todo, order: index + 1 }))
    setTodos(newTodos)
  }
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

  1. Filter to delete
  2. map to change the order value

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)

about 4 years ago · Juan Pablo Isaza Denunciar

0

You have to filter the array that doesn't have the specific id and assign its order later

const deleteTodo = (id) => {
  const newTodos = todos.filter(todo => todo.id !== id)

  newTodos.map((todo, index) => {
    return {
      ...todo,
      order: index
    }
  })

  setTodos(newTodos)
}

about 4 years ago · Juan Pablo Isaza Denunciar

0

This function will get the result you are looking for but not with removing. I recreate the array with the objects excluding the one you want to remove and give them the new ordering.

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)

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda