我有一个对象数组,它们作为块呈现给用户。他们可以拖放来更改块出现的顺序,然后我想要更改数组中对象的位置。
$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函数中记录数组时,两个日志都返回相同的顺序。
所有其他数组重新排序的例子都是针对不包含对象的数组,我想知道这是不是弄乱了我的代码?
答案 0 :(得分:0)
我正在测试您的代码并且正常运行。你在哪里修改阵列原型?只是尝试用对实际重新排序和测试的代码替换对move()的调用...
无论如何,您正在使用AngularJS。你为什么搞乱DOM?为每个对象添加一个名为Order的属性,让Angular执行同步...这意味着什么。
简而言之,看看这个模块,也许它会让你的生活更轻松:
答案 1 :(得分:0)
我认为,你的代码工作正常,但日志没有。
console.log
可能不会在运行时表示值,而是在查看时,尤其是对于多维对象和数组。
尝试使用其他日志查看console.log($scope[0].a, $scope[1].a, $scope[2].a)
您可能想要查看其他brwoser,因为这似乎是Chrome问题,请参阅此处:
Is Chrome's JavaScript console lazy about evaluating arrays?
Wrong value in console.log