数组JSON相同值,按照其他字段值如何排序?

按照 sort 字段进行降序排序, 如果 sort 字段值相同时, 按照 date 字段的时间进行JSON的降序排序

[
  {
    "name": "ABCDECE0",
    "date": "2022-11-21 02:21:10",
    "sort": 0
  },
  {
    "name": "ABCDECT0",
    "date": "2022-11-18 03:46:51",
    "sort": 0
  },
  {
    "name": "ABCDELO0T",
    "date": "2022-10-12 11:58:51",
    "sort": 1
  },
  {
    "name": "ABCDELP0",
    "date": "2022-09-29 10:08:49",
    "sort": 2
  },
  {
    "name": "ABCDEPE0X",
    "date": "2022-11-01 01:44:08",
    "sort": 2
  },
  {
    "name": "ABCDERM0",
    "date": "2022-09-21 09:02:36",
    "sort": 4
  },
  {
    "name": "FBCDEIT0",
    "date": "2022-10-26 11:18:02",
    "sort": 2
  },
  {
    "name": "GBCDELO0RY",
    "date": "2022-09-22 02:50:50",
    "sort": 2
  },
  {
    "name": "GBCDEOL0DEN",
    "date": "2022-10-26 09:11:31",
    "sort": 3
  },
  {
    "name": "GBCDEOO0DS",
    "date": "2022-11-21 03:39:59",
    "sort": 0
  },
  {
    "name": "LBCDEIN0KING",
    "date": "2023-01-02 12:00:00",
    "sort": 4
  },
  {
    "name": "LBCDEIV0ING",
    "date": "2022-11-21 04:47:20",
    "sort": 0
  },
  {
    "name": "LBCDEOV0ELY",
    "date": "2022-09-23 09:52:22",
    "sort": 5
  },
  {
    "name": "SBCDETE0ADY",
    "date": "2022-11-21 04:38:14",
    "sort": 0
  }
]
阅读 1.7k
7 个回答

js 代码

data.sort((a, b) => (b.sort - a.sort) || +(a.date < b.date) || +(a.date === b.date) - 1)

结果

[
  {name: 'LBCDEOV0ELY', date: '2022-09-23 09:52:22', sort: 5},
  {name: 'LBCDEIN0KING', date: '2023-01-02 12:00:00', sort: 4},
  {name: 'ABCDERM0', date: '2022-09-21 09:02:36', sort: 4},
  {name: 'GBCDEOL0DEN', date: '2022-10-26 09:11:31', sort: 3},
  {name: 'ABCDEPE0X', date: '2022-11-01 01:44:08', sort: 2},
  {name: 'FBCDEIT0', date: '2022-10-26 11:18:02', sort: 2},
  {name: 'ABCDELP0', date: '2022-09-29 10:08:49', sort: 2},
  {name: 'GBCDELO0RY', date: '2022-09-22 02:50:50', sort: 2},
  {name: 'ABCDELO0T', date: '2022-10-12 11:58:51', sort: 1},
  {name: 'LBCDEIV0ING', date: '2022-11-21 04:47:20', sort: 0},
  {name: 'SBCDETE0ADY', date: '2022-11-21 04:38:14', sort: 0},
  {name: 'GBCDEOO0DS', date: '2022-11-21 03:39:59', sort: 0},
  {name: 'ABCDECE0', date: '2022-11-21 02:21:10', sort: 0},
  {name: 'ABCDECT0', date: '2022-11-18 03:46:51', sort: 0}
]
data.sort((pre, next) => pre.sort == next.sort ? (pre.date > next.date ? 1 : -1) : (pre.sort - next.sort))
let sortArr=arr.sort((a, b) => {
  if (a.sort == b.sort) {
    return new Date(b.date) - new Date(a.date);
  }
  return b.sort - a.sort;
});
list.sort((s, v) => new Date(v.date) - new Date(s.date))
list.sort((s, v) => v.sort - s.sort)
console.log(list);
  let arr = [
    {
      "name": "ABCDECE0",
      "date": "2022-11-21 02:21:10",
      "sort": 0
    },
    {
      "name": "ABCDECT0",
      "date": "2022-11-18 03:46:51",
      "sort": 0
    },
    {
      "name": "ABCDELO0T",
      "date": "2022-10-12 11:58:51",
      "sort": 1
    },
    {
      "name": "ABCDELP0",
      "date": "2022-09-29 10:08:49",
      "sort": 2
    },
    {
      "name": "ABCDEPE0X",
      "date": "2022-11-01 01:44:08",
      "sort": 2
    },
    {
      "name": "ABCDERM0",
      "date": "2022-09-21 09:02:36",
      "sort": 4
    },
    {
      "name": "FBCDEIT0",
      "date": "2022-10-26 11:18:02",
      "sort": 2
    },
    {
      "name": "GBCDELO0RY",
      "date": "2022-09-22 02:50:50",
      "sort": 2
    },
    {
      "name": "GBCDEOL0DEN",
      "date": "2022-10-26 09:11:31",
      "sort": 3
    },
    {
      "name": "GBCDEOO0DS",
      "date": "2022-11-21 03:39:59",
      "sort": 0
    },
    {
      "name": "LBCDEIN0KING",
      "date": "2023-01-02 12:00:00",
      "sort": 4
    },
    {
      "name": "LBCDEIV0ING",
      "date": "2022-11-21 04:47:20",
      "sort": 0
    },
    {
      "name": "LBCDEOV0ELY",
      "date": "2022-09-23 09:52:22",
      "sort": 5
    },
    {
      "name": "SBCDETE0ADY",
      "date": "2022-11-21 04:38:14",
      "sort": 0
    }
  ]

  let a = arr.sort((a, b) => {
    if (a.sort == b.sort) {
      return (new Date(b.date) - new Date(a.date))
    } else {

      return b.sort - a.sort
    }
  })
  console.log(a);
const str2time=(str)=>{
  return new Date(str)
}
const result=arr.sort((a,b)=>{
  let s= a.sort-b.sort 
  if(s===0){
    return str2time(a.date)-str2time(b.date)
  }else{
    return s
  }
})
arr.sort((a, b) => {
      if (a.sort === b.sort) {
        return Date.parse(b.date) - Date.parse(a.date)
      }

      return b.sort - a.sort
    })

    console.log(arr);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题