Как преобразовать массив после удаления элемента?
Есть массив обьектов
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);
