Есть некоторое количество опций, вариантов ответа, в каждом из которых есть параметр order. По этому параметру элементы должны сортироваться, чтобы идти один за другим.
const options = [
{ text: '1', order: 0 },
{ text: '2', order: 1 },
{ text: '3', order: 2 },
{ text: '4', order: 3 },
{ text: '5', order: 4 },
];
Пользователь может как добавлять новые опции, так и удалять их. Перед отправкой опций проходимся по массиву, и если у него нет параметра order (в случае, когда была создана новая опция), то указываем на место order индекс элемента.
options.forEach((option, index) => {
option.order = option?.order || index;
});
Но это работает правильно только в случае, когда опции создаются одна за другой.
Если положение элементов было таким - [0, 1, 2, 3, 4], потом пользователь удалил опции с order = 2 и 3, и создал одну новую, то order у новой будет уже 3 - [0, 1, 4, 3], потому как после сокращения элементов в массиве индекс последнего созданного элемента был равен трём, а нужно, чтобы финальное положение элементов выглядело так - [0, 1, 4, 5].
То есть нужно, чтобы order каждого нового элемента был больше максимального текущего ордеринга, при этом index в условии тоже необходимо иметь, чтобы задавать ordering для новых последующих опций.
Как написать подобное условие?