Как преобразовать массив после удаления элемента?

Есть массив обьектов

arr=[
{
id:1,
num:1,
name:name1
},
{
id:2,
num:1,
name:name2
},
{
id:3,
num:3,
name:name3
},
{
id:4,
num:7,
name:name4
},
{
id:5,
num:7,
name:name5
},
{
id:6,
num:8,
name:name6
},
];

На гриде выглядит так: введите сюда описание изображения Выбираем строчку жмем удалить, допустим на строку 3(name3). СТрока удаляется, а все ниже элементы должны изменить поле Num на предыдущий элемент, причем те жлементы которые имеют одинаковый Num считаются как один обьект. То есть при удалении элемента с Num=3 должно получится так :1-name1,1-name2,3-name4,3-name5,7-name6

введите сюда описание изображения


Ответы (1 шт):

Автор решения: vsemozhebuty

Если нужен только код сдвига значений по массиву, то можно попробовать так:

const arr = [
  { id: 1, num: 1, name: "name1" },
  { id: 2, num: 1, name: "name2" },
  { id: 3, num: 3, name: "name3" },
  { id: 4, num: 7, name: "name4" },
  { id: 5, num: 7, name: "name5" },
  { id: 6, num: 8, name: "name6" },
];

function updateArray(array, indexToDelete) {
  if (indexToDelete < 0 || indexToDelete >= array.length) return;

  const [deletedItem] = array.splice(indexToDelete, 1);
  let lastSourceNum = deletedItem.num;

  for (let i = indexToDelete; i < array.length; i++) {
    while (i + 1 < array.length && array[i].num === array[i + 1].num) {
      array[i++].num = lastSourceNum;
    }
    [array[i].num, lastSourceNum] = [lastSourceNum, array[i].num];
  }
}

updateArray(arr, 2);

console.log(arr);

→ Ссылка