Алгоритм повторной индексации массива объектов после изменения порядка вставки или перетаскивания 'n'

Предположим, у меня есть индексированный массив объектов , например, эти, содержащие строки популярной народной песни;)

var lyrics = [
  {line : 2, words : "He's a lumberjack and he's okay"},
  {line : 1, words : "I'm a lumberjack and I'm okay"},
  {line : 3, words : "He sleeps all night and he works all day"}
];

Мой компаратор отобразит объекты в представлении в соответствии с индексом каждого объекта. Я хочу иметь возможность выполнять три задачи с этим массивом:

Задача 1) Переиндексировать при перетаскивании

Измените порядок объектов с помощью перетаскивания. Предположим, я уже знаю, как реализовать перетаскивание. Пример задачи: перетащите «Он лесоруб, и он в порядке» из индекса «1» после «Я лесоруб, и я в порядке». «Он лесоруб, и он в порядке» теперь должно занимать индекс «2», а «Я лесоруб, и я в порядке» - должно занимать индекс «1». Результирующий массив должен быть:

var lyrics = [
  {line : 1, words : "I'm a lumberjack and I'm okay"},
  {line : 2, words : "He's a lumberjack and he's okay"},
  {line : 3, words : "He sleeps all night and he works all day"}
];

Задача 2) Повторное индексирование при вставке

Добавить объект в любую точку массива, переиндексируя все элементы в массиве. Пример задачи: добавить объект «Я сплю всю ночь и работаю весь день» в качестве второго элемента в массиве. Результирующий массив должен быть:

var lyrics = [
  {line : 1, words : "I'm a lumberjack and I'm okay"},
  {line : 2, words : "I sleep all night and I work all day"},
  {line : 3, words : "He's a lumberjack and he's okay"},
  {line : 4, words : "He sleeps all night and he works all day"}
];

Задача 3) Повторное индексирование при удалении

Удалить объект из массива и переиндексировать все элементы в массиве. Так, например, если объект с индексом «3» был удален, результирующий массив должен быть:

var lyrics = [
  {line : 1, words : "I'm a lumberjack and I'm okay"},
  {line : 2, words : "I sleep all night and I work all day"},
  {line : 3, words : "He sleeps all night and he works all day"}
];

У меня нет степени CS, поэтому я не совсем понимаю, какой алгоритм поможет мне с этим справиться. Может ли кто-нибудь указать мне правильное направление?

Я работаю с javascript, поэтому, если кто-то знает что-нибудь, что делает вышеупомянутое, я все слышу.

5
задан Andrew De Andrade 8 March 2011 в 19:40
поделиться