Javascript使用优先级数组对对象数组进行排序
我有这个对象数组:
var eventList = [
{
eventName: "abc",
status: "completed"
},
{
eventName: "def",
status: "live"
},
{
eventName: "ghi",
status: "live"
},
{
eventName: "jkl",
status: "upcoming"
},
]
我想使用特定键的优先级数组对这些对象数组进行排序,例如["live", "upcoming", "completed"]状态,这意味着所有实时事件首先出现,然后是即将发生的事件,然后是已完成的事件。互联网上的答案似乎只能使用键按升序或降序对数组对象进行排序。我该如何处理?
回答
您可以使用Array.prototype.sort()带有排序数组的方法来完成。
const eventList = [
{
eventName: 'abc',
status: 'completed',
},
{
eventName: 'def',
status: 'live',
},
{
eventName: 'ghi',
status: 'live',
},
{
eventName: 'jkl',
status: 'upcoming',
},
];
const order = ['live', 'upcoming', 'completed'];
eventList.sort((x, y) => order.indexOf(x.status) - order.indexOf(y.status));
console.log(eventList);
如果您希望在排序时更快地进行索引搜索,您可以使用Map Object.
const eventList = [
{
eventName: 'abc',
status: 'completed',
},
{
eventName: 'def',
status: 'live',
},
{
eventName: 'ghi',
status: 'live',
},
{
eventName: 'jkl',
status: 'upcoming',
},
];
const order = ['live', 'upcoming', 'completed'];
const map = new Map();
order.forEach((x, i) => map.set(x, i));
eventList.sort((x, y) => map.get(x.status) - map.get(y.status));
console.log(eventList);
- @DarshanMalani what?