我有一个带有几个键值对的用户对象数组,我想根据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");
}
答案 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
});
根据您是否需要按升序或降序对其进行排序,只需将比较运算符在<
和>
之间来回翻转即可。