【问题标题】:Sort array of complex object by date in string format以字符串格式按日期对复杂对象数组进行排序
【发布时间】:2021-07-30 00:23:44
【问题描述】:

我需要通过 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"
        }
    ],
]   

【问题讨论】:

标签: javascript json sorting object ecmascript-6


【解决方案1】:

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

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);
})

【讨论】:

    【解决方案2】:

    您的数据确实有点不寻常。您将无法使用 Array.sort 因为数组的长度为零。因此,您需要将其转换为数组,对其进行排序并将其转换回初始的“数组”(基本上是具有某些属性的数组)。 这段代码应该这样做:

    Object.keys(gridObj) // get all the keys
        .map(e=> ({key: e, val: gridObj[e]})) // transform it into key-value tuples so we can sort the array by date 
        .sort((a, b) => {
             const aa = a.val.expiry.value.split('/').reverse(); // [YYYY, MM, MMDD] 
             const bb = b.val.expiry.value.split('/').reverse();
             return  (aa > bb) - (aa < bb); // convert arrays to string and compare
        }).reduce((acc, crt) => { // transform sorted tuples into sorted array
             acc[crt.key] = crt.val; 
             return acc
        }, Array()) // pass an empty array as accumulator
    

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 2020-11-11
      • 1970-01-01
      • 2021-07-05
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多