gpt4 book ai didi

javascript - 如何避免使用 2 个条件对 JavaScript 数组进行两次排序

转载 作者:行者123 更新时间:2023-11-28 14:07:36 25 4
gpt4 key购买 nike

我有一个订单数组,我需要根据 delivery_time 属性对其进行排序,以便可以首先处理最早的订单。但我们也可以选择立即交付订单。因此,无论交货时间如何,立即 delivery_method 订单都需要位于数组的开头。

现在,我通过使用 2 个排序函数来实现此目的,第一个函数根据 delivery_time 属性对订单进行排序,第二个函数根据 delivery_method_id 对数组进行排序属性(delivery_method_id == 1 表示立即交付)。如何仅使用一个 sort 函数获得相同的结果?

orders.sort((a, b) => {
return a.delivery_time - b.delivery_time; //sort based on delivery_time
}).sort((a, b) => {
return a.delivery_method_id === 1 ? -1: 0; //sort based on delivery_method_id
});

我尝试将这两个条件保留在第一个排序函数本身中,但在这种情况下,我在每天的起始位置而不是第一个位置得到立即交货订单(我希望我能清楚地解释这种情况)

如何避免使用两个函数对此订单数组进行排序?我已经安装了underscore.js,如果能用也ok。

示例数据(订单)

[{
"id": 149677,
"delivery_time": "2020-02-20 19:00:00",
"delivery_method_id": 2
}, {
"id": 149737,
"delivery_time": "2020-02-20 21:00:00",
"delivery_method_id": 2
}, {
"id": 160919,
"delivery_time": "2020-03-12 13:00:00",
"delivery_method_id": 3
},
{
"id": 160920,
"delivery_time": "2020-03-12 13:00:00", // according to delivery time, this should be at the bottom, but because the delivery_method_id == 1 , I need to push this to the top/beginning of array, this is why I had to use 2 sorts
"delivery_method_id": 1
}]

最佳答案

因此,假设您还希望 2 和 3 位于其后面,那么我们只需检查 id 是否相等,如果相等,我们按日期排序,如果不相等,我们按 id 排序。

var data = [{
"id": 149677,
"delivery_time": "2020-02-20 19:00:00",
"delivery_method_id": 2
}, {
"id": 149737,
"delivery_time": "2020-02-20 21:00:00",
"delivery_method_id": 2
}, {
"id": 160919,
"delivery_time": "2020-03-12 13:00:00",
"delivery_method_id": 3
},
{
"id": 160920,
"delivery_time": "2020-03-12 13:00:00",
"delivery_method_id": 1
}
]

var updated = data.sort((a,b) => {
var sortProp = a.delivery_method_id === b.delivery_method_id ? 'delivery_time' : 'delivery_method_id'
return a[sortProp] > b[sortProp] ? 1 : -1
})

console.log(updated)

关于javascript - 如何避免使用 2 个条件对 JavaScript 数组进行两次排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60732449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com