【发布时间】:2016-02-29 16:43:21
【问题描述】:
我有一个对象数组,它们以块的形式呈现给用户。他们可以拖放来改变这些块的出现顺序,然后我想改变数组中对象的位置。
$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(this);在 move 函数的主体中,Javascript 的 this 有时会令人困惑 ^^
-
你正在使用 AngularJS。你为什么要搞乱 DOM?为每个对象添加一个名为 Order 的属性,让 Angular 进行同步……这就是本意。
-
@Vi100 你能详细说明你的意思吗?
-
简而言之,看看这个模块,也许它会让你的生活更轻松:ngmodules.org/modules/ng-sortable
-
我正在测试您的代码并且工作正常。你在哪里修改 Array 原型?只需尝试用实际执行重新排序和测试的代码替换对 move() 的调用...
标签: javascript arrays object array-splice