我从服务器返回以下数据(此数据的结构是我无法控制的)...
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"
}
]
};
我希望能够按照第一个产品名称对每个跟踪结果进行排序。我找不到任何按子数组属性/值排序的代码。
答案 0 :(得分: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);
}
这样,排序基于Web浏览器的当前区域设置。您只需将该函数传递给sort
方法:
data.TrackingResults.sort(resultsComparator);
答案 1 :(得分:0)
您需要手动编写它:(在meskobalazs's注释的localeCompare上提示)
var result = data.TrackingResults.sort(function(a,b){
return a.Products.Product[0].ProductName.localeCompare(b.Products.Product[0].ProductName)
});
这应该用于排序TrackingResults