按子数组属性/值对JavaScript对象数组进行排序

时间:2015-01-09 09:18:53

标签: javascript arrays json sorting

我从服务器返回以下数据(此数据的结构是我无法控制的)...

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"
        }
    ]
};

我希望能够按照第一个产品名称对每个跟踪结果进行排序。我找不到任何按子数组属性/值排序的代码。

2 个答案:

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