Tengo una lista que tiene una columna Id. Cuando un usuario agrega un elemento, comienza con 3.1 y continúa con 3.2, 3.3, 3.4 a medida que se agrega cada elemento.
El problema: si un usuario elimina, por ejemplo, 3.3 en una lista de hasta 3.7, el orden de estas identificaciones no será secuencial. Estoy intentando con lo siguiente iterar a través de los Id para reordenarlos, comenzando con 3.1 para la fila superior de la lista.
Aquí está la función de eliminación:
const deleteItem = () => { const currentArray = myArr; for (var i = 0; i < currentArray .length; i++) { if (currentArray [i] == selectedItem) { currentArray .splice(i, 1); } setMyArr([...currentArray ]); } for(var i = 3.1; i < currentArray .length; i++){ i + 0.1; } }; El primero for , elimina el elemento y establece la matriz de elementos, for segundo es mi intento de restablecer el orden de los Id.
He buscado varias soluciones en SO pero no las he encontrado útiles.
¿Cómo haría esto?
Puede filtrar el elemento que desea eliminar y luego establecer nuevamente las identificaciones de esta manera:
currentArray .filter(item => item !== selectedItem) // Remove the selectedItem from the array .map((item, idx) =>({...item, id:3.1 + index * 0.1}) // Reset the ids sequentiallyLos índices y la longitud de la matriz no funcionarán con valores decimales.
Lo que creo que quieres hacer es iterar la matriz y establecer la identificación en función de la identificación de la primera:
const finalArray = currentArray.map((item,index)=> ({...item, id:3.1 + index * 0.1}); como se indica en los comentarios al index * 0.1 está sujeto a errores de redondeo, por lo que debe aplicar sus redondeos.
(Supongo que sus artículos son objetos y tienen un atributo de identificación)