У меня есть массив с clients_id. Этот массив отсортирован по порядку доставки. Этот порядок доставки может измениться: у меня есть функция (на основе Framework7) с сортируемым списком. Мне нужно отсортировать список доставки, когда он был изменен с помощью функции сортируемого списка.
1 - Когда страница загружается, я сохраняю массив в скрытом div. client1, client2, client3, client4 ... (Сортировать по порядку доставки)
<div id = "initialsort" style = "display:none"></div>
Список :
<li>client1</li>
<li>client2</li>
<li>client3</li>
<li>client4</li>
2 - У меня есть функция, которая обнаруживает перетаскиваемого клиента в списке для изменения позиции
$$('li').on('sortable:sort',function(event){
alert("From " + event.detail.startIndex + " to " + event.detail.newIndex);
}
3 - Массив начальной доставки (динамический):
client1 [0]
client2 [1]
client3 [2]
client4 [3]
Например, если пользователь помещает клиента 3 в первую позицию доставки, массив должен выглядеть следующим образом:
client4 [0]
client1 [1]
client2 [2]
client3 [3]
Мне нужно получать и сохранять новый массив каждый раз, когда пользователь меняет позицию в списке. Надеюсь, кто-нибудь может помочь!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


По требованию я создал метод. надеюсь, что это будет полезно.
var clientNewPosIndex = 0;
var clientOldList = ["client1","client2","client3","client4"];
var clientName = "client4";
function clientNewPos(clientNewPosIndex,clientName,clientOldList){
var clientNewList = clientOldList;
var clientOldPosIndex= clientNewList.indexOf(clientName);
if (clientOldPosIndex > -1){
clientNewList.splice(clientOldPosIndex,1);
clientNewList.splice( clientNewPosIndex, 0, clientName);
}else{
clientNewList.splice( clientNewPosIndex, 0, clientName);
}
return(clientNewList);
};
console.info(clientNewPos(clientNewPosIndex,clientName,clientOldList));
Спасибо Gaurav Rana, ваш код работает, только если вы перетащите его на первую позицию. Если вы перетащите «client4» во вторую позицию, он будет массивом, как если бы вы поместили client4 в первую позицию. Любая идея ?
вы можете изменить значение var clientNewPosIndex = 1; изменить позицию клиента.
Работает отлично. Спасибо, Гаурав Рана
Насколько я понимаю, в основном вам нужно поменять местами элементы, если вы знаете положение перетаскивания. «Например, если пользователь помещает клиента 3 в первую позицию доставки, массив должен стать» из этого могу предложить следующее решение. просто замена элементов массива с помощью позиции.
var arr = ["c1", "c2", "c3", "c4"]
var oldPos = 3
var newPos = 0
var tmp = arr[newPos]
arr[newPos] = arr[oldPos]
arr[oldPos] = tmp
console.info("arr : ", arr)
вывод: ['c4', 'c2', 'c3', 'c1'].
Надеюсь, это поможет вам ... @varatharajan, вам нужно еще кое-что сделать с вашим кодом. Я думаю, вы почти приблизились .. но вы неправильно поняли проблему, я так думаю ..
var arr = ["c1", "c2", "c3", "c4"];
var arrLength = arr.length();
var i = 0;
while(i < arrLength-1){
var temp = arr[i];
arr[i] = arr[arrLength-1];
arr[arrLength-1] = temp;
i++;
}
console.info("arr : ", arr)
Я добавил jQuery и jQuery-ui, поскольку предполагаю, что jQuery - это $, а
sortable:sort- это событие из jQuery-ui.