Есть такой код, функция move вешается на ивент "click" у li элемента,
у каждого li элемента есть атрибут key который содержит индекс элемента в массиве, собственно нужно по клику опустить или поднять элемент на одну ступеньку выше в массиве, придумал костыль this.todos.move(index, index === 0 ? index += 1 : index -= 1); идеально работает когда в массиве 2 элемента, когда добавляется третий всё валится, вот код
move = (event) => {
Array.prototype.move = function (from, to) {
this.splice(to, 0, this.splice(from, 1)[0]);
};
if (event.target.nodeName === 'LI') {
let elIndex = event.path[0].key;
event.target.addEventListener('keyup', key => {
if (key.keyCode === 40) {
let index = elIndex;
this.todos.move(index, index === 0 ? index += 1 : index -= 1);
this.todos$.next(this.todos);
}
if (key.keyCode === 38) {
let index = elIndex;
this.todos.move(index, index === 0 ? index += 1 : index -= 1);
this.todos$.next(this.todos);
}
});
}
}