You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于深层嵌套数组的purchase_date排序顶层对象数组

问题

我有如下深层嵌套的JSON对象数组:

data = [
    {
        category:{
            category_id:"1",
            sub_category:[
                {
                    sub_cat_id:"1.1",
                    sub_sub_cat:[
                        {
                        sub_sub_cat_id: "1.1.1",
                        purchase_date:1676537327563
                        },
                        {
                        sub_sub_cat_id: "1.1.2",
                        purchase_date:1677537327578
                        }
                    ]
                },
                {
                    sub_cat_id:"1.2",
                    sub_sub_cat:[
                        {
                        sub_sub_cat_id: "1.2.1",
                        purchase_date:1671537327567
                        },
                        {
                        sub_sub_cat_id: "1.2.2",
                        purchase_date:1673537327578
                        }
                    ]
                }
            ]
        }
    },
    {
        category:{
            category_id:"2",
            sub_category:[
                {
                    sub_cat_id:"2.1",
                    sub_sub_cat:[
                        {
                        sub_sub_cat_id: "2.1.1",
                        purchase_date:167237327567
                        },
                        {
                        sub_sub_cat_id: "2.1.2",
                        purchase_date:1675537327578
                        },
                        {
                        sub_sub_cat_id: "2.1.3",
                        purchase_date:1674537327578
                        }
                    ]
                },
                {
                    sub_cat_id:"2.2",
                    sub_sub_cat:[
                        {
                        sub_sub_cat_id: "2.2.1",
                        purchase_date:1672537327567
                        },
                        {
                        sub_sub_cat_id: "2.2.2",
                        purchase_date:1678537327578
                        }
                    ]
                }
            ]
        }
    },
    {
        category:{
            category_id:"3",
            sub_category:[
                {
                    sub_cat_id:"3.1",
                    sub_sub_cat:[
                        {
                        sub_sub_cat_id: "3.1.1",
                        purchase_date:1679537327567
                        },
                    ]
                },
            ]
        }
    },
]

这是三层嵌套结构:顶层是对象数组data,每个对象包含category属性;category内有sub_category对象数组;sub_category内有sub_sub_cat对象数组。我需要根据sub_sub_cat中的purchase_date字段,对顶层的data数组进行降序排序,且不能改变sub_category和sub_sub_cat数组的原有顺序。我能处理单层对象数组的排序,但搞不定这种三层嵌套场景,求帮忙实现这个排序操作。

预期输出如下:

[
    {
        category:{
            category_id:"3",
            sub_category:[
                {
                    sub_cat_id:"3.1",
                    sub_sub_cat:[
                        {
                        sub_sub_cat_id: "3.1.1",
                        purchase_date:1679537327567
                        },
                    ]
                },
            ]
        }
    },
    {
        category:{
            category_id:"2",
            sub_category:[
                {
                    sub_cat_id:"2.1",
                    sub_sub_cat:[
                        {
                        sub_sub_cat_id: "2.1.1",
                        purchase_date:167237327567
                        },
                        {
                        sub_sub_cat_id: "2.1.2",
                        purchase_date:1675537327578
                        },
                        {
                        sub_sub_cat_id: "2.1.3",
                        purchase_date:1674537327578
                        }
                    ]
                },
                {
                    sub_cat_id:"2.2",
                    sub_sub_cat:[
                        {
                        sub_sub_cat_id: "2.2.1",
                        purchase_date:1672537327567
                        },
                        {
                        sub_sub_cat_id: "2.2.2",
                        purchase_date:1678537327578
                        }
                    ]
                }
            ]
        }
    },{
        category:{
            category_id:"1",
            sub_category:[
                {
                    sub_cat_id:"1.1",
                    sub_sub_cat:[
                        {
                        sub_sub_cat_id: "1.1.1",
                        purchase_date:1676537327563
                        },
                        {
                        sub_sub_cat_id: "1.1.2",
                        purchase_date:1677537327578
                        }
                    ]
                },
                {
                    sub_cat_id:"1.2",
                    sub_sub_cat:[
                        {
                        sub_sub_cat_id: "1.2.1",
                        purchase_date:1671537327567
                        },
                        {
                        sub_sub_cat_id: "1.2.2",
                        purchase_date:1673537327578
                        }
                    ]
                }
            ]
        }
    }
]
解决方案

核心思路

要实现顶层数组按嵌套最深的purchase_date降序排序,关键是先为每个顶层对象找到其下所有sub_sub_cat中的最大purchase_date,然后以这个最大值为依据进行排序。这样既不会破坏内层数组的原有顺序,又能完成顶层数组的排序要求。

代码实现

// 定义函数获取某个顶层对象对应的最大purchase_date
const getMaxPurchaseDate = (item) => {
    let maxDate = 0;
    // 遍历category下的所有sub_category
    item.category.sub_category.forEach(subCat => {
        // 遍历sub_category下的所有sub_sub_cat
        subCat.sub_sub_cat.forEach(subSubCat => {
            if (subSubCat.purchase_date > maxDate) {
                maxDate = subSubCat.purchase_date;
            }
        });
    });
    return maxDate;
};

// 对data数组进行降序排序
const sortedData = [...data].sort((a, b) => {
    const maxA = getMaxPurchaseDate(a);
    const maxB = getMaxPurchaseDate(b);
    // 降序排序:b的最大值减a的最大值
    return maxB - maxA;
});

console.log(JSON.stringify(sortedData, null, 2));

代码解释

  1. getMaxPurchaseDate函数:遍历当前顶层对象的所有嵌套层级,找出该对象下所有sub_sub_cat中的最大purchase_date值。
  2. 排序逻辑:使用数组的sort方法,传入自定义比较函数。比较两个顶层对象对应的最大purchase_date,用maxB - maxA实现降序排序。
  3. 不破坏原数组:使用[...data]创建原数组的浅拷贝,避免修改原data数组本身。

验证结果

运行上述代码后,输出结果与预期一致:顶层数组按各对象下最大purchase_date从大到小排列,而sub_category和sub_sub_cat的内部顺序完全保留。


内容的提问来源于stack exchange,提问作者anu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:05:31