按日期对嵌套对象数组进行排序

时间:2020-07-07 23:51:45

标签: javascript sorting

我有一个带有几个键值对的用户对象数组,我想根据chatInfo数组中的createdAt对用户进行排序

[
    {
        _id: "1",
        age: "30",
        chatInfo: [
            {
                chatId: "22",
                createdAt: "2020-07-07T00:39:30.571Z",
                seen: false,
                senderEmail: "debot73186@klefv.com",
            },
        ],
    },
    {
        _id: "2",
        age: "21",
        chatInfo: [
            {
                chatId: "22",
                createdAt: "2020-07-07T20:08:33.171Z",
                seen: false,
                senderEmail: "debot73186@klefv.com",
            },
        ],
    },
];

更新

我用下划线尝试了

const sorting = (arr)=>  {
    for (let i = 0; i < arr.length; i++) {
        const user = arr[i];
        user.chatInfo.sort((a, b) => {
            return new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime();
        });
    }
    return _.sortBy(arr, "chatInfo");
}

1 个答案:

答案 0 :(得分:1)

您可以使用内置的sort方法对JavaScript数组的元素进行排序。为了使其按预期工作,我们需要将ISO时间戳与其数值进行比较。

您可以使用ISO时间戳字符串轻松构造Date对象。使用getTime方法将返回其数值表示形式(以毫秒为单位)。然后可以在基本排序函数中比较毫秒。

yourArray.sort((a, b) => {
  return new Date(a.chatInfo[0].createdAt).getTime() < new Date(b.chatInfo[0].createdAt).getTime() ? -1 : 1
});

根据您是否需要按升序或降序对其进行排序,只需将比较运算符在<>之间来回翻转即可。