vaech
@vaech

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

Есть некоторое количество опций, вариантов ответа, в каждом из которых есть параметр 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 для новых последующих опций.
Как написать подобное условие?
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
Отсортировать по полю order, при удалении это поле order обновлять.

Если их менять нельзя (требуется оставить пропуски), то при добавлении давать новому элементу устанавливать ордер больший, чем максимально имеющийся. item.order = maxOrder+1
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы