首页 > 解决方案 > 以字符串格式按日期对复杂对象数组进行排序

问题描述

我需要通过 key.expiry.value 对这个名为 gridObj 的数组进行排序。

要排序的对象

我尝试了以下没有结果:

const sorted = Object.keys(gridObj).map((val) => gridObj[val]?.expiry?.sort((a, b) => {
    const aa = a.value.split('/').reverse();
    const bb = b.value.split('/').reverse();
    return (aa > bb) - (aa < bb);
  }));

我在做什么坏事?我在 StackOverflow 上尝试了其他解决方案,但没有人帮助我

我要这个

gridObj = [
    "11566260": [
        expiry: {
            header: "Expiry",
            value: "14/08/2023"
        }
    ],
    "11566261": [
        expiry: {
            header: "Expiry",
            value: "10/08/2023"
        }
    ],
]

变成这样:

gridObj = [
    "11566261": [
        expiry: {
            header: "Expiry",
            value: "10/08/2023"
        }
    ],

    "11566260": [
        expiry: {
            header: "Expiry",
            value: "14/08/2023"
        }
    ],
]   

标签: javascriptjsonsortingobjectecmascript-6

解决方案


你的数据有点挑剔。当其中一个假设不成立时,这里就有出错的余地。(多个键,数组中的多个项目等)

gridObj.sort((a, b) => {
  const aa = new Date(a[Object.keys(a)[0]][0].expiry.value);
  const bb = new Date(b[Object.keys(b)[0]][0].expiry.value);
  return (aa > bb) - (aa < bb);
})

推荐阅读