【问题标题】:How to sort first by a property value then by date如何先按属性值排序,然后按日期排序
【发布时间】:2021-09-18 02:42:02
【问题描述】:

让这个对象:

{
    type: string,
    date: Date
}

我有一个如上所述的对象数组,我想对其进行排序以获取类型为“Premium”的第一个项目,然后列出所有其他项目,按日期排序。

如何使用 Javascript 的sort 方法来做到这一点?

【问题讨论】:

标签: javascript arrays sorting object


【解决方案1】:

使用自定义排序功能并添加一些硬约束。可能有一些小问题,但大部分应该没问题

let obj = [{
    type: 'Premium',
    date: new Date('1995-12-17T03:24:00')
},
{
    type: 'random',
    date: new Date('1995-12-17T03:24:00')
},
{
    type: 'Premium',
    date: new Date('1995-12-17T03:22:00')
},
{
    type: 'random',
    date: new Date('1995-12-17T03:21:00')
},
{
    type: 'random',
    date: new Date('1995-12-17T03:20:00')
}]

let obj2 = obj.sort((x, y) => {
    if(x.type == 'Premium')
        return 1
    if(y.type == 'Premium')
        return -1
    if(x.date > y.date)
        return 1
    if(x.date < y.date)
        return -1
    return 0
}).reverse()

console.log(obj2)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="script.js"></script>
</head>
<body>
    
</body>
</html>

【讨论】:

  • 为什么需要使用reverse() 才能使其正常工作?你不应该写一个自定义函数的“反向”版本吗?
  • 反向的想法很简单。基本上我正在做的是最重视'Premium'类型。如果您在没有自定义实现的情况下调用 sort,则所有内容都会以升序模式排序。这就是为什么我使用反向来保持上升模式。您可以删除 reverse 并交换索引(1 而不是 -1,反之亦然)以获得相同的结果
  • 我确实尝试过交换索引,但我不工作。我继续使用reverse()。谢谢。
  • 好吧,它确实对我有用https://jsfiddle.net/Trillyy/9aj0yxuh/
  • 对不起,我的错。谢谢;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 2013-11-19
  • 2014-01-18
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多