我有一个项目列表,想要按照字段enqueuedAt
降序排序。在属于同一队列(由queueName
标识)的项目中,position
(最低优先级)应优先于enqueuedAt
。
换句话说,总排序顺序应基于enqueuedAt
(降序),在其中,属于同一队列的项目应相互交换位置,以便具有较低position
的项目始终出现在具有较高position
的项目之前。
我为了实现这个目标编写了下面的代码。 有没有方法可以提高时间复杂度?
const data = [
{
id: 1,
enqueuedAt: 8,
queueName: 'Queue 1',
position: 1
},
{
id: 2,
enqueuedAt: 7,
queueName: 'Queue 2',
position: 1
},
{
id: 3,
enqueuedAt: 6,
queueName: 'Queue 3',
position: 3
},
{
id: 4,
enqueuedAt: 5,
queueName: 'Queue 4',
position: 2
},
{
id: 5,
enqueuedAt: 1,
queueName: 'Queue 1',
position: 2
},
{
id: 6,
enqueuedAt: 2,
queueName: 'Queue 4',
position: 1
},
{
id: 7,
enqueuedAt: 4,
queueName: 'Queue 1',
position: 3
},
{
id: 8,
enqueuedAt: 3,
queueName: 'Queue 2',
position: 2
}
]
function sortThem(array) {
array.sort((a, b) => b.enqueuedAt - a.enqueuedAt)
for (let i = 0; i < array.length - 1; i++) {
for (let j = i + 1; j < array.length; j++) {
if (array[i].queueName === array[j].queueName) {
if (array[j].position < array[i].position) {
const t = array[j]
array[j] = array[i]
array[i] = t
}
}
}
}
return array
}
console.log(sortThem(data))
enqueuedAt
为3的条目没有排在enqueuedAt
为2的前面? - trincotenqueuedTime
进行排序后,你所说的那个项目(具有enqueuedAt
2 的项目)的位置(索引3)属于队列4。不允许将属于另一个队列的某些项目放在那里。只有属于队列4的项目可以去那里,前提是它的position
小于原占用者的position
。 - karthikaruna