В общем, у вас тут сразу несколько ошибок.
Вот исправленный работающий пример, а теперь подробнее:
- Метод массивов splice изменяет исходный массив, и категорически не стоит использовать его напрямую на стейте, только на копии в коллбеке, это может приводить к весёлым ошибкам и увлекательному их поиску
- Цикл в вашем примере был абсолютно ни к чему, если вы использовали метод splice, который принимает напрямую индекс элемента для удаления/замены, тем более map, так как вы в нём возвращали item не изменяя его
- Даже при условии исправления предыдущих ошибок ваш пример корректно работать не будет так как после первого же перемещения id элемента больше не будет равен его текущему индексу в массиве, а вы пытаетесь из него получить это индекс