2015-01-09 4 views
0

я следующие данные, возвращенные с сервера (структура этих данных является то, что у меня нет контроля над) ...Сортировка массива объектов JavaScript сублимитов свойств массива/значение

var data = { 
    "TrackingResults": [ 
     { 
      "Name": "Pack One", 
      "Products": { 
       "Product": [ 
        { 
         "ProductName": "Soccer Ball" 
        }, 
        { 
         "ProductName": "Tennis Racket" 
        }, 
        { 
         "ProductName": "Gold Putter" 
        } 
       ] 
      }, 
      "status": "Despatched", 
      "Location": "Alabama", 
      "Type": "Parcel" 
     }, 
     { 
      "Name": "Pack Two", 
      "Products": { 
       "Product": [ 
        { 
         "ProductName": "Backet Ball Hoop" 
        }, 
        { 
         "ProductName": "Base Ball Glove" 
        } 
       ] 
      }, 
      "status": "Despatched", 
      "Location": "Florida", 
      "Type": "Parcel" 
     } 
    ] 
}; 

Я хотел бы иметь возможность сортировать каждый результат отслеживания по первому названию продукта. Я не могу найти какой-либо код, который будет сортироваться по свойству/значению sub-массива.

+2

Вы, вероятно, нужно использовать 'Array.sort()' с обычаем 'Comparator'! – NINCOMPOOP

ответ

0

Вы должны написать его вручную, как: (с намеком на localeCompare от meskobalazs's комментария)

var result = data.TrackingResults.sort(function(a,b){ 
    return a.Products.Product[0].ProductName.localeCompare(b.Products.Product[0].ProductName) 
}); 

Это должно работать на сортировочных TrackingResults

2

Вы должны использовать метод Array.sort с пользовательской функцией сравнения :

var resultsComparator = function (res1, res2) { 
    var prod1 = res1.Products.Product[0].ProductName; 
    var prod2 = res2.Products.Product[0].ProductName; 
    return prod1.localeCompare(prod2); 
} 

Таким образом, заказ основан на текущем расположении веб-браузера. Вы просто передать функцию методу sort:

data.TrackingResults.sort(resultsComparator); 
Смежные вопросы