Предположим, у меня есть индексированный массив объектов , например, эти, содержащие строки популярной народной песни;)
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, поэтому, если кто-то знает что-нибудь, что делает вышеупомянутое, я все слышу.