如果我有一个
数组const users = [
{ id: 2, name: 'User 2' },
{ id: 5, name: 'User 5' },
{ id: 3, name: 'User 3' },
]
如何根据此数组
订购它们const ids = [5, 2, 3]
这样结果就像
const users = [
{ id: 5, name: 'User 5' },
{ id: 2, name: 'User 2' },
{ id: 3, name: 'User 3' },
]
我尝试了ids.map(id => users.find(u => u.id === id))
,但我认为这没有得到优化,因为我们会为每个find()
id
答案 0 :(得分:0)
您可以创建一个Map
对象,其中包含每个值的排序索引。然后,使用该排序索引对数组进行实际排序:
const ids = [5,2,3];
// Create sorting index using a Map object
// The id value is the key, the the index in that array is the value
// in the map and is used as the sort index
const mapIndex = new Map();
for (let [i, id] of ids.entries()) {
mapIndex.set(id, i);
}
const users = [
{ id: 2, name: 'User 2' },
{ id: 5, name: 'User 5' },
{ id: 3, name: 'User 3' },
];
// sort using the mapIndex
users.sort((a, b) => {
return mapIndex.get(a.id) - mapIndex.get(b.id);
});
这假设您的ids数组中没有.id
个值。如果这是可能的,那么您需要定义不在ids
数组中的id值的排序位置,并为排序回调中的id添加保护。