2015-04-13 4 views
-1

Я пытаюсь сортировать следующий массив, но каждый раз, когда он дает мне ошибку, я искал другие решения в переполнении стека, но ни один из них не работает.AngularJS сортировать массив объектов

$scope.builds = [build:[ 
    {'_id': '6384', 'name': Mock1, 'builDate': 20150302T110232}, 
    {'_id': '6383', 'name': Mock2, 'builDate': 20150209T130212}, 
    {'_id': '6382', 'name': Mock3, 'builDate': 20150103T145212}] 
]; 
    var sorted = $scope.sortByKey($scope.builds.build[index],'builDate') 

И это моя функция:

$scope.sortByKey = function (array, key) { 
     return array.sort(function(a,b){ 
      var x = a[key] < b[key]? -1:1; 
      return x; 
     }); 
    } 
+0

??? это дает мне ошибку –

+0

Какое сообщение об ошибке? – hochas

ответ

1

С этим связано несколько проблем.

1) Вы пытаетесь использовать массив как объект

$scope.builds = [build:[ 

... должно быть ...

$scope.builds = {build:[ 

2) 20150302T110232 не является допустимым число (T ISN не разрешено). Поэтому вам нужно превратить их в строки (или превратить их в реальные объекты Date, так как это то, что они кажутся).

3) $scope.builds.build[index] - это объект, а не массив. Итак, я предполагаю, что вы имели в виду $scope.builds.build.

var sorted = $scope.sortByKey($scope.builds.build[index],'builDate') 

... должно быть ...

var sorted = $scope.sortByKey($scope.builds.build,'builDate') 
+0

Спасибо, когда я исправил ошибку, я понял о дате. Теперь сортировка работает. – Vistor

0

Это не 100% ясно, что это проблема из вашего вопроса, но вы объявить два уровня массива в настоящее время.

$scope.builds Изменение определения для:

$scope.builds = {build:[ 
    {'_id': '6384', 'name': Mock1, 'builDate': 20150302T110232}, 
    {'_id': '6383', 'name': Mock2, 'builDate': 20150209T130212}, 
    {'_id': '6382', 'name': Mock3, 'builDate': 20150103T145212}] 
}; 
+0

Я не могу, я получаю данные с сервера, и я не могу его редактировать – Vistor

1

$ scope.builds массив не является объектом, а индекс не существует ... Попробуйте это:

$scope.builds = {build:[ 
    {'_id': '6384', 'name': Mock1, 'builDate': 20150302T110232}, 
    {'_id': '6383', 'name': Mock2, 'builDate': 20150209T130212}, 
    {'_id': '6382', 'name': Mock3, 'builDate': 20150103T145212}] 
}; 
var sorted = $scope.sortByKey($scope.builds.build,'builDate') 
+0

Спасибо, это было не так. – Vistor

0

Стоит отметить также, что есть три значения (0, 1 и -1), которые могут быть возвращены из Array.prototype.sort. Оценка сортировки должна возвращать правильное значение или сортировка будет неустойчивой (и вы можете получить сообщение об ошибке).

Ваша функция сортировки должна выглядеть следующим образом:

return array.sort(function(a,b){ 
     if(a[key] == b[key]) { 
      return 0; 
     } 

     return a[key] < b[key]? -1:1; 
    }); 
Смежные вопросы