ng-repeat сортирует сложные объекты с массивами внутри - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть такая структура, которая должна быть отсортирована по Locations.Address.distance

{
    "Id": "123",
    "Type": "someType",          
    "Locations": [{
        "Address": {
            "Line1": "111 test dr",
            "City": "pope",
            "State": "AZ",
            "PostalCode": {
                "Part1": "87212"
            } 
        },
         "Distance": "0.7" }]  
},

{
    "Id": "456",
    "Type": "someType",          
    "Locations": [{
        "Address": {
            "Line1": "777 test dr",
            "City": "pope",
            "State": "AZ",
            "PostalCode": {
                "Part1": "87212"
            } 
        },
         "Distance": "0.1" }]  
}

В массиве Locations всегда будет только 1 элемент. Я хочу отсортировать так, чтобы второй объект с id = 456 отображался как первый элемент, так как он имеет расстояние = 0,1, что меньше, чем у первого элемента, где расстояние = 0,7. Я пробовал что-то вроде этого, но это не работает:

 sortedList =filter('orderBy')($scope.responseArray,'Locations.this[0].Distance'], false);

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

С помощью фильтра вы делаете, как показано ниже

 var result=$filter('orderBy')(this.items, 'Locations[0].Distance')

https://stackblitz.com/edit/js-sort-complex-array?file=index.js

Другой подход заключается в использовании javascript sort () метода, который вы можете написать свою собственную логику для сортировки

var result = items.sort(function (a, b) {
  var distance1 = parseFloat(a.Locations[0].Distance); 
  var distance2 = parseFloat(b.Locations[0].Distance); 
  if (distance1 < distance2) {
    return -1;
  }
  if (distance1 > distance2) {
    return 1;
  }


  return 0;
});

Рабочая демоверсия

https://stackblitz.com/edit/angularjs-complex-filter?file=home/home.controller.js

0 голосов
/ 02 ноября 2018

Хитрость заключалась в том, чтобы ссылаться на первый элемент в массиве Locations без использования «this»:

 sortedList = $filter('orderBy')($scope.pharmacyResponse, Name.LastName','Locations[0].Distance'], false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...