Массив заказа Javascript по индексу

У меня есть массив с 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]

Мне нужно получать и сохранять новый массив каждый раз, когда пользователь меняет позицию в списке. Надеюсь, кто-нибудь может помочь!

Я добавил jQuery и jQuery-ui, поскольку предполагаю, что jQuery - это $, а sortable:sort - это событие из jQuery-ui.

HMR 10.12.2018 12:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
99
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

По требованию я создал метод. надеюсь, что это будет полезно.

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 в первую позицию. Любая идея ?

jpsFR 10.12.2018 13:18

вы можете изменить значение var clientNewPosIndex = 1; изменить позицию клиента.

Gaurav Rana 10.12.2018 13:23

Работает отлично. Спасибо, Гаурав Рана

jpsFR 10.12.2018 13:37

Насколько я понимаю, в основном вам нужно поменять местами элементы, если вы знаете положение перетаскивания. «Например, если пользователь помещает клиента 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)

Другие вопросы по теме