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

Sorting an array of JavaScript objects by sub array property/value

本文关键字:数组 对象 JavaScript 排序 值对 属性      更新时间:2023-09-26

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

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

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

您应该将 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);

您需要手动编写它,例如:(带有关于 locale 的提示从 meskobalazs 的评论中比较)

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

这应该适用于对跟踪结果进行排序