У меня есть массив объектов, которые представлены пользователю как блоки. Они могут перетаскивать, чтобы изменить порядок появления этих блоков, а затем я хочу изменить положение объектов в массиве.Невозможно изменить порядок массива объектов в JS
$scope.myArray = [{a:1,b:2,c:3}, {a:11,b:22,c:33}, {a:111,b:222,c:333}];
function orderChanged(event) {
console.log($scope.myArray);
//logs [{a:1,b:2,c:3}, {a:11,b:22,c:33}, {a:111,b:222,c:333}]
console.log("source:", event.source.index, "dest:", event.dest.index);
//logs source: 1 dest: 2
$scope.myArray.move(event.source.index, event.dest.index);
console.log($scope.myArray);
//logs [{a:1,b:2,c:3}, {a:11,b:22,c:33}, {a:111,b:222,c:333}]
};
//this is going to rearrange the array
Array.prototype.move = function (from, to) {
this.splice(to, 0, this.splice(from, 1)[0]);
};
Событие orderChange имеет индекс источника и индекс назначения в виде целых чисел, которые представляют их порядок в настоящее время для пользователя, который также отображает на свои позиции в массиве, прежде чем любой движущийся произошло.
Я не могу заставить массив переупорядочивать, каждый раз, когда я регистрирую массив в функции orderChange, оба журнала возвращают один и тот же порядок.
Все остальные примеры переназначения массива предназначены для массивов, которые не содержат объектов, мне интересно, является ли это тем, что испортило мой код?
Попробуйте поставить console.log (это); в теле функции перемещения Javascript это иногда путает ^^ – Noctisdark
Вы используете AngularJS. Почему вы возитесь с DOM? Добавьте свойство под названием «Заказ» к каждому из ваших объектов и позвольте Angular сделать синхронизацию ... это то, что предназначено для. – Vi100
@ Vi100 Вы можете уточнить, что вы имеете в виду? – tester123