无法重新排序JS

时间:2015-11-26 14:30:41

标签: javascript arrays object array-splice

我有一个对象数组,它们作为块呈现给用户。他们可以拖放来更改块出现的顺序,然后我想要更改数组中对象的位置。

$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函数中记录数组时,两个日志都返回相同的顺序。

所有其他数组重新排序的例子都是针对不包含对象的数组,我想知道这是不是弄乱了我的代码?

2 个答案:

答案 0 :(得分:0)

我正在测试您的代码并且正常运行。你在哪里修改阵列原型?只是尝试用对实际重新排序和测试的代码替换对move()的调用...

无论如何,您正在使用AngularJS。你为什么搞乱DOM?为每个对象添加一个名为Order的属性,让Angular执行同步...这意味着什么。

简而言之,看看这个模块,也许它会让你的生活更轻松:

http://ngmodules.org/modules/ng-sortable

答案 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