Переупорядочить массив объектов по ключу с одним в фиксированной позиции и обновить его родственные ключи - PullRequest
0 голосов
/ 05 августа 2020

У меня есть массив объектов, и каждый объект может иметь свойство order. Теперь я хочу переупорядочить этот массив, обновив порядковый номер одного объекта. Затем его братья и сестры должны быть обновлены, чтобы его порядок снова стал осмысленным.

База:

  • 01: без порядка
  • 02: порядок 4
  • 03: порядок 2
  • 04: нет порядка

Шаги, если 04 получить фиксированное положение 2:

Шаг 1
  • 01: порядок 0
  • 02: заказ 4
  • 03: заказ 2
  • 04: без заказа
Шаг 2
  • 01: заказ 0
  • 03: заказ 2
  • 04: без заказа
  • 02: заказ 4
Шаг 3
  • 01: заказ 0
  • 03: заказ 1
  • 04: без заказа
  • 02: заказ 4
Шаг 4
  • 01: заказ 0
  • 03: заказ 1
  • 04: заказ 2
  • 02: заказ 4
Шаг 5
  • 01: заказ 0
  • 03 : заказ 1
  • 04: заказ 2
  • 02: заказ 3

В случае, когда 04 получает фиксированную позицию 1, 02 будет в том же индексе, так как 04 фиксировано 02 получить 04 старый i ndex или текущий + 1.

1 Ответ

0 голосов
/ 05 августа 2020

Думаю, вам нужно что-то вроде этого:

  1. Вы обновляете порядок элементов
  2. Вы их сортируете
  3. Вы обновляете значения порядка

const data = [{
  i: 1,
  order: "no order"
}, {
  i: 2,
  order: 4
}, {
  i: 3,
  order: 2
}, {
  i: 4,
  order: "no order"
}];

function printData() {
  data.forEach(x => console.log(x.i, x.order));
}

function changeOrderAndSort(index, order) {
  data[index].order = order;
  printData();

  data.sort((a, b) => a.order - b.order);
  console.log("--")
  printData();

  for (let i = 0; i < data.length; i++) {
    data[i].order = i;
  }
  console.log("--")
  printData();
}

changeOrderAndSort(3, 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...